如何将 pyodbc 连接到 Access (.mdb) 数据库文件

Posted

技术标签:

【中文标题】如何将 pyodbc 连接到 Access (.mdb) 数据库文件【英文标题】:How to connect pyodbc to an Access (.mdb) Database file 【发布时间】:2010-07-15 00:51:14 【问题描述】:

这是我尝试过的:

-通过搜索找到Vista的ODBC数据源管理器*,

-添加新的文件数据源*,选择 Microsoft Access 驱动程序 (*.mdb),然后选择我感兴趣的 mdb 文件,

-从 python shell 导入 pyodbc 并尝试:

pyodbc.connect("DSN=<that Data Source I just created>")

我收到以下错误消息(葡萄牙语**):

Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Nome da fonte de dados n\xe3o encontrado e nenhum driver padr\xe3o especificado (0) (SQLDriverConnectW)') 

翻译为“未找到数据源名称且未指定标准驱动程序”。

我做错了什么? 如何正确处理? 另外,我在网上搜索了文档,但没有发现任何有价值的文档,有人可以推荐任何文档吗?

*名称可能不完全准确,因为我的 Windows 是葡萄牙语。

**不,葡萄牙语没有 '3' 和 '\' 作为字母,这些是打印错误的特殊字符

【问题讨论】:

【参考方案1】:

DSN= 仅用于系统或用户 DSN。

对于 DSN 文件,您需要使用 FILEDSN=c:\myDsnFile.dsn

http://www.connectionstrings.com/ 是你最好的朋友。

【讨论】:

【参考方案2】:

我在使用 pyodbc 时遇到了类似的问题,但不是 Access 而是不同的 ODBC 驱动程序。

这对我有帮助。 http://robertoschiabel.wordpress.com/2008/02/28/windows-x64-32bit-odbc-vs-64bit-odbc/ (这里是相应的知识库文章,以防此 URL 消失。http://support.microsoft.com/kb/942976/en-us)

我们以前的服务器硬件已经死机,我们不得不在 64 位操作系统上快速重新部署,因为这就是我们可用的全部。使用普通的 ODBC 管理工具,我添加了适当命名的 DSN,但它仍然声称没有找到它。只有在运行 ODBC 管理员的特殊 32 位版本时,我才能定义我的脚本使用 pyodbc 可以找到的 DSN。

【讨论】:

【参考方案3】:

我使用 odbc 模块(包含在 ActiveState Python 中),但测试了 pyodbc 并且对我有用:

#db = odbc.odbc('northwind')
#db = odbc.odbc('Driver=Microsoft Access Driver (*.mdb);Dbq=Nwind.mdb;Uid=;Pwd=;')
#db = pyodbc.connect('Driver=Microsoft Access Driver (*.mdb);Dbq=Nwind.mdb;Uid=;Pwd=;')
db = pyodbc.connect('DSN=northwind')

当然,带注释的连接也可以。

我将 nothwind 配置为用户 DSN,因此您可能必须将 ODBC 数据库连接配置为用户 DSN 或系统 DSN,或者无需在 ODBC 管理器中进行配置,您可以使用 ConnectString 指向您的 .mdb 文件。

【讨论】:

【参考方案4】:

使用 pyodbc 列出您的 odbc 连接以查看您在使用什么是明智的。确保使用适当的 pyodbc 32 位 Python 32 位驱动程序。如果您想使用 64 位访问文件,您应该使用提供驱动程序的 64 位 MS Access。

sources = pyodbc.dataSources()
keys = sources.keys()
for key in keys: 
   print key

【讨论】:

以上是关于如何将 pyodbc 连接到 Access (.mdb) 数据库文件的主要内容,如果未能解决你的问题,请参考以下文章

将 sqlalchemy 连接到 MS Access

使用 Pyodbc 连接到具有用户定义函数的 MS Access 文件

如何使用 pyodbc 将表从 MS Access 迁移到 Postgres?

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

Python连接到Access错误

使用 pyodbc 将 Python 连接到 MS SQL Server