使用 pyodbc 连接到 MS Access 2007 (.accdb) 数据库
我在 Win7 x64 上,使用 Python 2.7.1 x64。出于教育目的,我正在将在 VC++ 中创建的应用程序移植到 Python。
原始应用程序使用以下连接字符串连接到 MS Access 2007 格式的 DB 文件没有问题:OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; 数据源=|DataDirectory|DB.accdb");
现在,当我尝试使用 pyodbc 和以下连接字符串在 Python 中连接到同一个数据库文件(这次放入 C:\)时:conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; 数据源=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;")< /code> - 同样的错误。这真的很奇怪,因为 pyodbc.dataSources() 显示我有这个提供程序。
添加2: 我尝试了 win32com.client 的用法,例如此处,以便通过使用进行连接OLE DB - 没有成功。看来这是不可能的,没有任何作用。
I am on Win7 x64, using Python 2.7.1 x64. I am porting an application I created in VC++ to Python for educational purpouses.
The original application has no problem connecting to the MS Access 2007 format DB file by using the following connection string:OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|DB.accdb");
Now, when I try to connect to the same DB file (put in C:\ this time) in Python using pyodbc and the following conenction string:conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DB.accdb;")
, and no matter whether I keep the OLEDB provider or I use the Provider=MSDASQL;
as mentioned here (MS mentions it's not availiable for 64bit), I keep getting the following error:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnectW)')
What might cause this problem?
ADD:
I have looked into pyodbc docs more closely and tried conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\\DB.accdb;")
- the same error. This is really weird, since the pyodbc.dataSources() shows that I have this provider.
ADD2:
I tried win32com.client usage such as here in order to connect by using OLE DB - no success. Seems that it's impossible, nothing works.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试使用类似以下内容,而不是使用与 OLeDb 相同的字符串:
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"
您可能无法直接与驱动程序对话您的 x64 Python 应用程序:Access 2007 及其 ACE 驱动程序仅是 32 位。
相反,请获取适用于 Access 2010 的 ACE x64 驱动程序,但请注意,如果您已经安装了 Access 或 ACE 驱动程序 32 位,则它将无法工作。
如果您希望您的应用程序在其他系统上运行,我会坚持使用 32 位版本的 Python 和 ACE 驱动程序:不建议混合 x64 和 x86 版本的 Office 工具和驱动程序,您可能最终会得到很多如果这样做,可能会出现问题。
如果问题不在于 32/64 位混合,那么可能 这个问题有您寻求的答案。
Try to use something like the following instead of using the same string as the one for OLeDb:
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\DB.accdb;"
You may not be able to talk to the driver directly from your x64 Python application: Access 2007 and its ACE driver are 32 bits only.
Instead, get the ACE x64 driver for Access 2010, but be careful that if you already have Access or the ACE driver 32bit installed, it won't work.
I would stick to the 32bit versions of Python and of the ACE driver if you expect your app to be run on other systems: it is not recommended to mix x64 and x86 versions of Office tools and drivers, you'll probably end up with lots of issues if you do.
If the issue is not with the 32/64bit mix, then maybe this question has the answer you seek.