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.")
错误消息大致翻译为“与 'SQL Server Native Client 11.0SQLHOST' 的 ODBC 连接失败”。
我无法使用 pypyodbc 通过 .accdb 数据库访问 SQL Server,但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 的经验,所以请耐心等待,如果我遗漏了对我来说似乎不必要的重要信息,请告诉我...