私は次のコードを持っています:
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などを再インストールするなど、問題を修正していません。
驚いたことに誰もこれに気づきませんでしたが、Python 3.6およびpyodbc ...に問題があるようです...私は3.5に戻りましたが、正常に動作します。
conn
はNoneなので、接続の取得に失敗したはずです。おそらく、これが機能しているノートブックには「QueryBuilder」が正しく設定されており、他にこれを使用しようとした場合はそうではありません。その名前については特に詳しくありませんが、データソースを設定する必要がある場合や、適切なODBCドライバをインストールする必要がある場合があります。
pyodbc.dataSources()
やpyodbc.drivers()
を調べて、構成されているデータソースとインストールされているドライバーの詳細を確認し、システム間の違いを確認できます。