【问题标题】:Python - AttributeError: 'NoneType' object has no attribute 'cursor'Python - AttributeError:“NoneType”对象没有属性“光标”
【发布时间】:2018-02-06 08:32:41
【问题描述】:

我有以下代码:

import pyodbc

conn = pyodbc.connect('DSN=QueryBuilder')
cursor = conn.cursor()
stringA = "SELECT GrantInformation.Call FROM GrantInformation"
cursor.execute(stringA)
rows = cursor.fetchall()

它多年来一直运行良好,但突然间它今天停止工作,并有以下回溯:

Traceback (most recent call last):
  File "C:/Users/nicholas/Desktop/test.py", line 6, in <module>
    cursor = conn.cursor()
AttributeError: 'NoneType' object has no attribute 'cursor'

代码在 Jupyter Notebook 中仍然有效,但不再适用于外部,即在 Pycharm/IDLE 中

如果我在 Pycharm 中运行:

print(pyodbc.dataSources())
print(pyodbc.drivers())

我明白了:

none
none

如果我在 Jupyter Notebook 中执行此操作,我会得到:

{'Visio Database Samples': 'Microsoft Access Driver (*.mdb, *.accdb)', 'dBASE Files': 'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)', 'Excel Files': 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)', 'MS Access Database': 'Microsoft Access Driver (*.mdb, *.accdb)', 'QueryBuilder': 'SQL Server', 'QueryBuilder_Beta': 'SQL Server', 'MIDAS': 'SQL Server', 'Querybuilder_YearEnd': 'SQL Server', 'ResearchFish': 'SQL Server', 'ESRCContacts': 'SQL Server', 'ESRCContactsDEV': 'SQL Server', 'Sample Amazon Redshift DSN': 'Amazon Redshift (x64)'}

['SQL Server', 'SQL Server Native Client 10.0', 'Amazon Redshift (x64)', 'SQL Server Native Client 11.0', 'PostgreSQL ANSI(x64)', 'PostgreSQL Unicode(x64)', 'ODBC Driver 11 for SQL Server', 'ODBC Driver 13 for SQL Server']

我失去了情节,因为我非常依赖这段代码来完成我的所有工作,但我没有做任何事情来解决问题,即重新安装 Python、pyodbc 等

【问题讨论】:

  • 我遇到了类似的问题并通过升级依赖项解决了这个问题
  • 谢谢普布杜。知道我是否回到 3.6 很有用!

标签: python pyodbc


【解决方案1】:

conn 为无,因此您一定无法获取连接。大概这个工作的笔记本已经正确设置了“QueryBuilder”,而您尝试使用它的任何其他地方都没有。我对这个名称并不特别熟悉,但您可能需要设置数据源,或者您可能需要安装相应的 ODBC 驱动程序。

您应该能够查看pyodbc.dataSources() 和/或pyodbc.drivers() 以获取有关配置了哪些数据源以及安装了哪些驱动程序的更多详细信息,并了解您的系统之间的区别。

【讨论】:

  • 好的,谢谢。我会检查一下。奇怪的是它昨天运行良好而不是今天(我从 Python 转换为 .exe 文件的程序在连接 dsn 链接时运行良好),它实际上只是在 Python 中,不在笔记本上。
  • 他们都指向同一个DSN,现在超级困惑。我得把我的个人笔记本电脑带进来测试一下。
【解决方案2】:

很惊讶没有人注意到这一点,但 Python 3.6 和 pyodbc 似乎存在问题...我已经回到 3.5 并且工作正常。

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2017-12-28
    • 2017-10-05
    • 2018-03-17
    • 2019-01-10
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多