我有以下代码:
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等
答案 0 :(得分:4)
conn
为None,因此您必须无法获取连接。据推测,这个工作的笔记本正确设置了“QueryBuilder”,而你尝试使用的其他任何地方都没有。我并不特别熟悉该名称,但您可能需要设置数据源,或者您可能需要安装相应的ODBC驱动程序。
您应该能够查看pyodbc.dataSources()
和/或pyodbc.drivers()
以获取有关配置了哪些数据源以及安装了哪些驱动程序的详细信息,并了解系统之间的区别。< / p>
答案 1 :(得分:4)
惊讶没有人注意到这一点,但似乎Python 3.6和pyodbc存在问题......我已经回到3.5并且它工作正常。