使用pyodbc连接MS Access 2007 (.accdb)数据库
我在使用Win7 x64系统,Python版本是2.7.1 x64。我正在把一个用VC++写的应用程序移植到Python,主要是为了学习。
原来的应用程序可以顺利连接到MS Access 2007格式的数据库文件,使用的连接字符串是:
OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
现在,我想在Python中用pyodbc连接同一个数据库文件(这次放在C:\下),使用的连接字符串是:
conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
不管我是用OLEDB提供者还是用Provider=MSDASQL;
(在这里提到过,MS也提到它在64位下不可用),我总是遇到以下错误:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] 数据源名称未找到且未指定默认驱动程序 (0) (SQLDriverConnectW)')
这可能是什么原因呢?
补充:
我仔细查看了pyodbc的文档,并尝试了conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;")
- 结果还是同样的错误。这真的很奇怪,因为pyodbc.dataSources()显示我有这个提供者。
补充2: 我尝试使用win32com.client,比如在这里提到的方式,通过OLE DB连接 - 但没有成功。看起来这根本不可能,什么都不管用。
1 个回答
试着用下面这样的方式,而不是直接用OLeDb的那个字符串:
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"
你可能无法直接从你的64位Python应用程序与驱动程序对话:Access 2007及其ACE驱动程序都是32位的。
相反,你可以下载Access 2010的ACE 64位驱动程序,但要小心,如果你已经安装了32位的Access或ACE驱动程序,它就不能正常工作。
如果你希望你的应用程序能在其他系统上运行,我建议你使用32位版本的Python和ACE驱动程序:不建议混合使用64位和32位的Office工具和驱动程序,这样做可能会遇到很多问题。如果问题不是出在32位和64位的混合上,那么也许这个问题能给你想要的答案。