Python-AttributeError: объект "NoneType" не имеет атрибута "курсор"

у меня есть следующий код:

import pyodbc

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

его работал нормально в течение многих лет, но внезапно он перестал работать сегодня со следующим traceback:

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, но больше не работает снаружи, т. е. в Pycharm / IDLE

если я бегу в Pycharm:

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

Я:

none
none

если я сделаю это в блокноте Jupyter, я получу:

{'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 и т. д.

2 ответов


conn нет, поэтому вам, должно быть, не удалось получить соединение. Предположительно, ноутбук, где это работает, правильно настроен "QueryBuilder", а где бы вы ни пытались использовать это, нет. Я не знаком с этим именем конкретно, но вам может потребоваться настроить источник данных или установить соответствующий драйвер ODBC.

вы должны иметь возможность смотреть на pyodbc.dataSources() и/или pyodbc.drivers() чтобы получить более подробную информацию о том, какие источники данных настраиваются и какие драйверы установлены, и посмотреть, в чем разница между вашими системами.


удивлен, что никто этого не заметил, но похоже, что есть проблемы с Python 3.6 и pyodbc... Я вернулся к 3.5, и он работает нормально.