使用 pyodbc 连接到链接访问数据库
Connection to Linked Access Database Using pyodbc
我正在尝试从 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
但这并没有改变任何东西。
您有两个相互排斥的约束:
- I have to use 64 bit Python
...和...
- The other database requires a 32 bit Oracle driver
64 位进程不能使用 32 位 ODBC 驱动程序;他们根本不兼容。如果堆栈的其余部分(Oracle ODBC 驱动程序、Microsoft Office/Access 应用程序)是 32 位的,那么如果您想使用如您所述链接表格。
附加说明:您关于 "The other database requires a 32 bit Oracle driver" 的说法是可疑的。 Oracle、SQL Server 等客户端-服务器数据库并不特别关心它们接收的请求是来自 32 位客户端还是 64 位客户端。在客户端的细节上可能存在差异,但这是客户端的ODBC驱动程序(and/orODBC驱动程序管理器)要弄清楚的。
我正在尝试从 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
但这并没有改变任何东西。
您有两个相互排斥的约束:
- I have to use 64 bit Python
...和...
- The other database requires a 32 bit Oracle driver
64 位进程不能使用 32 位 ODBC 驱动程序;他们根本不兼容。如果堆栈的其余部分(Oracle ODBC 驱动程序、Microsoft Office/Access 应用程序)是 32 位的,那么如果您想使用如您所述链接表格。
附加说明:您关于 "The other database requires a 32 bit Oracle driver" 的说法是可疑的。 Oracle、SQL Server 等客户端-服务器数据库并不特别关心它们接收的请求是来自 32 位客户端还是 64 位客户端。在客户端的细节上可能存在差异,但这是客户端的ODBC驱动程序(and/orODBC驱动程序管理器)要弄清楚的。