使用pyodbc连接到链接的访问数据库

时间:2019-04-10 18:04:02

标签: python-3.x ms-access pyodbc

我正在尝试从Microsoft Access数据库获取数据。问题是我受到的约束数量:

  1. 我必须使用64位Python
  2. 访问数据库由链接到其他数据库的表组成
  3. 另一个数据库需要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

但这并没有改变任何东西。

1 个答案:

答案 0 :(得分:1)

您有两个互斥的约束:

  
      
  1. 我必须使用64位Python
  2.   

...和...

  
      
  1. 另一个数据库需要32位Oracle驱动程序
  2.   

64位进程不能使用32位ODBC驱动程序。它们根本不兼容。如果堆栈的其余部分(Oracle ODBC驱动程序,Microsoft Office / Access应用程序)是32位的,那么如果您想像以前一样使用链接表,则需要使用32位版本的Python。描述。

其他说明:关于“另一个数据库需要32位Oracle驱动程序”的说法是可疑的。客户端服务器数据库(例如Oracle,SQL Server等)并不特别在意它们是否从32位客户端或64位客户端接收请求。客户端上的详细信息 可能有所不同,但这是由客户端上的ODBC驱动程序(和/或ODBC驱动程序管理器)确定的。