Как pypyodbc может подключаться к связанным таблицам в базе данных .accdb? Возможно ли это вообще, или это ограничение pyodbc?
Мне нужно получить данные из базы данных MS Acess .accdb в Python. Это отлично работает, и я могу использовать pypyodbc
для доступа к таблицам и запросам, определенным в базе данных .accdb. Однако в базе данных также есть таблицы, связанные с внешним SQL Server. При доступе к таким связанным таблицам pypyodbc
жалуется, что не может подключиться к серверу SQL.
test.accdb
содержит две таблицы: Test
(локальная таблица) и cidb_ain
(связанная таблица SQL)
Следующий код Python 3 - это моя попытка получить доступ к данным:
import pypyodbc as pyodbc
cnxn = pyodbc.connect(driver='Microsoft Access Driver (*.mdb, *.accdb)',
dbq='test.accdb',
readonly=True)
cursor = cnxn.cursor()
# access to the local table works
for row in cursor.execute("select * from Test"):
print(row)
print('----')
# access to the linked table fails
for row in cursor.execute("select * from cidb_ain"):
print(row)
Вывод:
(1, 'eins', 1)
(2, 'zwei', 2)
(3, 'drei', 3)
----
Traceback (most recent call last):
File "test_02_accdb.py", line 14, in <module>
for row in cursor.execute("select * from cidb_ain"):
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 1605, in execute
self.execdirect(query_string)
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 1631, in execdirect
check_success(self, ret)
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 986, in check_success
ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 964, in ctrl_err
raise Error(state,err_text)
pypyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC-Treiber für Microsoft Access] ODBC-Verbindung zu 'SQL Server Native Client 11.0SQLHOST' fehlgeschlagen.")
Сообщение об ошибке примерно переводится как «сбой подключения ODBC к« SQL Server Native Client 11.0SQLHOST »».
Я не могу получить доступ к SQL Server через базу данных .accdb с помощью pypyodbc, но запрос таблицы cidb_ain
из MS Access возможен. Кроме того, я могу напрямую подключиться к SQL Server:
cnxn = pyodbc.connect(driver='SQL Server Native Client 11.0',
server='SQLHOST',
trusted_connection='yes',
database='stuffdb')
Учитывая, что (1) MS Access (и Matlab тоже) может использовать информацию, содержащуюся в файле .accdb, для запроса связанных таблиц, и (2) SQL Server доступен, я предполагаю, что проблема связана с pypyodbc
. (То, как имя драйвера и имя хоста преобразовано в 'SQL Server Native Client 11.0SQLHOST'
в сообщении об ошибке, тоже кажется несколько подозрительным.)
У меня нет опыта работы с Access, поэтому проявите терпение и дайте мне знать, если я пропустил важную информацию, которая показалась мне ненужной ...