使用pyodbc连接到MS Access 2007(.accdb)数据库

时间:2011-06-18 13:42:08

标签: python ms-access 64-bit pyodbc

我在Win7 x64上,使用Python 2.7.1 x64。我正在将我在VC ++中创建的应用程序移植到Python中,用于教育用户 通过使用以下连接字符串连接到MS Access 2007格式DB文件,原始应用程序没有问题:
OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
现在,当我尝试使用pyodbc和以下连接字符串连接到Python中的同一个DB文件(放入C:\这次)时: conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
,无论我是否保留OLEDB提供商,或者我使用here MS mentions it's not availiable for 64bithereProvider=MSDASQL;,我都会收到以下错误:

pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')

可能导致此问题的原因是什么?

ADD: 我更仔细地研究了pyodbc文档并尝试conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;") - 同样的错误。这真的很奇怪,因为pyodbc.dataSources()表明我有这个提供者。

ADD2: 我尝试使用win32com.client用法,例如{{3}},以便使用OLE DB进行连接 - 没有成功。似乎这是不可能的,没有任何作用。

1 个答案:

答案 0 :(得分:13)

  1. 尝试使用类似下面的内容而不是使用与OLeDb相同的字符串:
    "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"

  2. 您可能无法直接从x64 Python应用程序与驱动程序通信:Access 2007及其ACE驱动程序仅为32位。
    取而代之的是获取ACE x64 driver for Access 2010,但要小心,如果您已经安装了Access或ACE驱动程序32位,它将无法工作。
    如果你希望你的应用程序在其他系统上运行,我会坚持使用32位版本的Python和ACE驱动程序:不建议混合x64和x86版本的Office工具和驱动程序,你可能最终会有很多如果你这样做的话。

  3. 如果问题不是32 / 64bit混音,那么可能是this question has the answer you seek