【发布时间】:2023-12-08 11:30:01
【问题描述】:
我正在尝试从 Microsoft Access 数据库中获取数据。问题是我受到的限制数量:
- 我必须使用 64 位 Python
- access 数据库由链接到不同数据库的表组成
- 其他数据库需要 32 位 Oracle 驱动程序
因此,我将 Access 数据库存储在本地,并尝试使用 PyODBC 连接到该数据库。
我试过环顾四周并弄乱连接字符串,但这个问题似乎很独特。
这是我目前的修改版本:
import pyodbc
dbPATH = r'C:\path\to\database.accdb'
UID = 'username'
PWD = 'username'
driver = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
credentials = r'DBQ=%s;UID=%s;PWD=%s'%(dbPATH, UID, PWD)
conn_str = driver + credentials
connection = pyodbc.connect(conn_str)
cursor = connection.cursor()
cursor.execute("select * from [table_name];")
for row in cursor.fetchone():
print(row)
这是我通常得到的错误:
pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] ODBC--connection to '{Oracle in OraClient11g_home1_32bit}' failed. (-2001) (SQLExecDirectW)")
这令人惊讶,因为这是访问数据库用来连接到其他数据源的驱动程序和连接。
我试过设置
pyodbc.pooling = False
但这并没有改变任何东西。
【问题讨论】:
-
this tip 有帮助吗?
-
这是我看过的东西之一,但即使我关闭池连接,错误消息也不会改变
-
"这是访问数据库用来连接到其他数据源的驱动程序和连接" - 是的,但是如果您的机器安装了 32 位 Office,那么 MSACCESS.EXE 可以使用 32-位 Oracle 的 ODBC 驱动程序,因为它在 Windows 32 位子系统中运行,而您的 64 位 Python 应用程序无法“看到” 32 位 Oracle 驱动程序。
-
对,所以理论上设置 ``` pyodbc.pooling = False ``` 应该绕过这个问题吧?
-
不,问题比这更根本。看我的回答。
标签: python-3.x ms-access pyodbc