PYODBC InterfaceError - имя источника данных не найдено - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь подключить Python к базе данных MS Access с помощью pyodbc, но каждый раз я получаю следующую ошибку:

pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

И вот что я написал для подключения Python к MS Access:

import pyodbc

conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\PILOT_DATA.accdb;')
cursor = conn.cursor()
cursor.execute('select * from p_inventor')

for row in cursor.fetchall():
    print (row)

В соответствии с ошибкой, он не находит имя источника данных, поэтому я изменил 'ДРАЙВЕР' на 'DSN'

import pyodbc

conn = pyodbc.connect(r'DSN={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\PILOT_DATA.accdb;')
cursor = conn.cursor()
cursor.execute('select * from p_inventor')

for row in cursor.fetchall():
    print (row)

Но это не помогает. Я получаю следующую ошибку:

pyodbc.Error: ('IM010', '[IM010] [Microsoft][ODBC Driver Manager] Data source name too long (0) (SQLDriverConnect)')

Другой обходной путь, который я пробовал, заключается в использовании как 32-разрядного, так и 64-разрядного Python

Ниже приводятся сведения о версии:

  • Python 3.7.4 64 бит
  • пункт 19.2.3
  • pyodbc-4.0.27
  • Office365 16

Было бы очень полезно знатьчто еще я могу сделать, чтобы подключить Python к базе данных ACCESS. Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 09 октября 2019

Если Office 365 установлен как «нажми и работай» (C2R), то некоторые компоненты Office хранятся в «изолированной среде», которая не видна приложениям, не относящимся к Office. Access Database Engine является одним из этих компонентов.

В этом случае решение для использования Access Database Engine из внешних (не Office) приложений заключается в загрузке и установке распространяемого пакета Access Database Engine, как описано вСтатья в Microsoft Docs:

Невозможно использовать драйвер Access ODBC или поставщика OLEDB вне приложений Office Click-to-Run

0 голосов
/ 18 октября 2019

Я решил эту проблему, установив Access Database Engine. Для этого мне пришлось деинсталлировать программу office365 -> установить механизм доступа к базам данных -> переустановить office365. И тогда код работает отлично!

0 голосов
/ 08 октября 2019

В соответствии с pyodbc документами вам нужно настроить ODBC, и вы можете проверить его так (как сказал @Parfait);

import pyodbc
[x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...