【问题标题】:Connecting python with sql server 2012将python与sql server 2012连接
【发布时间】:2013-05-24 11:29:03
【问题描述】:

我在尝试测试我的 python 与 sql server 的连接时收到以下错误消息:

TypeError: 'pyodbc.Connection' 对象不可调用。

关于如何解决这个问题的任何想法?谢谢。

import pyodbc
conn = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server Native client 11.0}',
                  server = 'XXXX-PC', database = 'MYDATABASE')
def main():
        cursor = conn()
        cursor.execute('CREATE TABLE production (product_ID int, product_Name varchar')
        cursor.execute('SELECT* FROM production')
        return cursor.fetchall
        cursor.close()


if __name__ == '__main__':
            main()

【问题讨论】:

  • 嗨 gpicchiarelli,我按照文章中的说明进行操作:def conn(): return pyodbc.connect('Trusted_Connection=yes', driver ...但我收到以下语法错误:ProgrammingError: ( '42000', "[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]'varchar' 附近的语法不正确。(102) (SQLExecDirectW)")
  • 这是一个sql语法错误,我需要调整我的sql查询。
  • 这是正确的。由于它是一个 varchar,你必须指定它总共可以有多少个字符。

标签: python sql-server pyodbc


【解决方案1】:

错误可能是由这行引起的:

    cursor = conn()

应该改成

    cursor = conn.cursor()

conn 不是一种调用方法,这就是您收到错误的原因。请参阅pyodbc's GettingStarted 文档中的连接到数据库示例。


另外一行

    return cursor.fetchall

应该改为:

    return cursor.fetchall()

fetchall 是一个方法,所以它需要()


另外,在致电cursor.close() 之前,不确定为什么要从def main() 返回。它永远不会被调用。或许将fetchall()的结果设置为一个变量,调用close(),然后返回结果。例如:

    results = cursor.fetchall()
    cursor.close()
    return results

或者,如果您只是测试连接而不对结果做任何事情,您是否甚至需要返回任何内容:

    cursor.fetchall()
    cursor.close()
    return

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多