Python - AttributeError: 'NoneType' object has no attribute 'cursor'
Python - AttributeError: 'NoneType' object has no attribute 'cursor'
我有以下代码:
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 等
conn
是None,所以你一定是连接失败了。据推测,它正在运行的笔记本 "QueryBuilder" 设置正确,而您尝试使用它的其他任何地方都没有。具体那个名字我不是很熟悉,但是你可能需要设置数据源,或者你可能需要安装合适的ODBC驱动。
您应该可以查看 pyodbc.dataSources()
and/or pyodbc.drivers()
以获取有关配置了哪些数据源和安装了哪些驱动程序的更多详细信息,并查看两者之间的区别你的系统。
很惊讶没有人注意到这一点,但 Python 3.6 和 pyodbc 似乎存在问题...我已经回到 3.5 并且工作正常。
我有以下代码:
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 等
conn
是None,所以你一定是连接失败了。据推测,它正在运行的笔记本 "QueryBuilder" 设置正确,而您尝试使用它的其他任何地方都没有。具体那个名字我不是很熟悉,但是你可能需要设置数据源,或者你可能需要安装合适的ODBC驱动。
您应该可以查看 pyodbc.dataSources()
and/or pyodbc.drivers()
以获取有关配置了哪些数据源和安装了哪些驱动程序的更多详细信息,并查看两者之间的区别你的系统。
很惊讶没有人注意到这一点,但 Python 3.6 和 pyodbc 似乎存在问题...我已经回到 3.5 并且工作正常。