使用 Python 读取 Microsoft Access 数据库需要啥?

Posted

技术标签:

【中文标题】使用 Python 读取 Microsoft Access 数据库需要啥?【英文标题】:What do I need to read Microsoft Access databases using Python?使用 Python 读取 Microsoft Access 数据库需要什么? 【发布时间】:2010-10-25 14:23:15 【问题描述】:

如何在 Python 中访问 Microsoft Access 数据库?使用 SQL?

我更喜欢适用于 Linux 的解决方案,但我也可以适应 Windows。

我只需要读取权限。

【问题讨论】:

【参考方案1】:

就个人而言,即使经过多次尝试,我也无法让 MDB 工具(以及相关的 ODBC 工具,如 unixODBC)在 Linux 下与 Python 或 php 一起正常工作。我刚刚尝试了这个问题here 的另一个答案中的说明,我得到的只是“分段错误(核心转储)”。

但是,我确实获得了UCanAccess JDBC 驱动程序,以便在 Linux 上从 Jython 或 CPython+JayDeBeApi 读取 .mdb 和 .accdb 文件。有关如何在 Ubuntu 14.04 LTS 下进行设置的详细说明,请参阅我的其他答案 here。

【讨论】:

【参考方案2】:

我已使用 PYODBC 成功连接到 MS Access 数据库 - 在 Windows 上。安装很简单,使用也很简单,你只需要设置正确的连接字符串(MS Access 的连接在列表中),然后你就可以使用示例了。

【讨论】:

注意这个问题说的是linux,你礼貌地提到了windows。 linux 的正确答案(来自 pyodbc 开发人员)低于***.com/a/15400363/638649【参考方案3】:

将 Access 数据库作为 pandas 数据框读取 (Windows)。

这是一个非常快速和简单的解决方案,我已成功地将其用于小型数据库。

您可以通过永久链接到 Excel 并保存该文件来读取 Access 数据库(需要点击几下),链接在这里:

https://support.office.com/en-gb/article/Connect-an-Access-database-to-your-workbook-a3d6500c-4bec-40ce-8cdf-fb4edb723525

然后,您可以将该 Excel 文件作为 pandas 数据框读取。

因此,例如,将链接的 Excel 文件另存为“link_to_master.xlsx”,位于 \FileStore\subfolder1\subfolder 位置。

在 python 中运行以下命令:

import pandas as pd
import os
os.chdir('\\\\FileStore\\subfolder1\\subfolder') #sets the folder location
df = pd.read_excel('link_to_master.xlsx') # reads the Excel file
df

如果您重新访问您的 python 脚本,请考虑链接刷新的频率。即 Excel 和 Access 之间的链接是静态的。

【讨论】:

【参考方案4】:

我在 Windows 下将 Python 连接到 MS Access 的方式是使用这种方式:Connect to MS Access with Python。 或许你能在Win 7上找到一些麻烦,所以我找到了解决办法:Solving a connection between MS Access and Python on Windows 7

我没试过在Linux下连接!

【讨论】:

【参考方案5】:

在 Linux 上,MDBTools 是您目前唯一的机会。 [disputed]

在 Windows 上,您可以使用 pypyodbc 处理 mdb 文件。

创建 Access mdb 文件:

import pypyodbc
pypyodbc.win_create_mdb( "D:\\Your_MDB_file_path.mdb" )

Here is an Hello World script 完全演示了 pypyodbc 的 Access 支持功能。

免责声明:我是 pypyodbc 的开发者。

【讨论】:

根据你的主页it runs on linux. mdb create 和 compact 函数只能在 windows 上运行,因为它是 ODBC 接口函数,它是跨平台的。 在 Linux mdbtools 上。检查codeenigma.com/community/blog/… 和nialldonegan.me/2007/03/10/… “在 Linux 上,MDBTools 是你目前唯一的机会。” - 这不再是真的。 Jython 和 UCanAccess JDBC 驱动程序是 Linux(和 Mac OS,我假设)下的可行替代方案。详情在另一个问题here【参考方案6】:

如果您有空闲时间,可以尝试修复和更新这个通过本机 COM32 客户端 API 读取 MS-Access DB 的 python 类:Extraction and manipulation class for Microsoft Access

【讨论】:

【参考方案7】:

在 Ubuntu 12.04 上,这是我为使其正常工作所做的。

安装pyodbc:

$ sudo apt-get install python-pyodbc

安装一些额外的驱动程序:

$ sudo apt-get install mdbtools libmdbodbc1

制作一个连接数据库并显示所有表的小测试程序:

import os
import pyodbc

db_path = os.path.join("path", "toyour", "db.mdb")
odbc_connection_str = 'DRIVER=MDBTools;DBQ=%s;' % (db_path)
connection = pyodbc.connect(odbc_connection_str)
cursor = connection.cursor()

query = "SELECT * FROM MSysObjects WHERE Type=1 AND Flags=0"
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
    print row

希望对你有所帮助。

【讨论】:

我相信libmdbodbc1 现在已替换为odbc-mdbtool。至少这就是我在 Ubuntu 18.04 上所做的工作。 @MartinThøgersen 我相信它被称为odbc-mdbtools(s at end)【参考方案8】:

老问题,但我想我会为 Windows 发布一个 pypyodbc 替代建议:ADO。事实证明,使用现代(与老式 ODBC)驱动程序通过 COM 访问 Access 数据库、Excel 电子表格和其他任何东西真的很容易。

查看以下文章:

http://www.mayukhbose.com/python/ado/index.php http://www.markcarter.me.uk/computing/python/ado.html http://www.ecp.cc/ado_examples.shtml

【讨论】:

【参考方案9】:

您已经找到了一些听起来不错的解决方案。另一个可能比您想要的更接近“金属”的工具是 MDB Tools。

MDB Tools 是一组开源库和实用程序,用于在不使用 Microsoft DLL 的情况下方便地从 MS Access 数据库(mdb 文件)导出数据。因此非 Windows 操作系统可以读取数据。或者,换句话说,他们正在对 MDB 文件的布局进行逆向工程。

另外请注意,我怀疑他们是否已经开始处理 ACCDB 文件,并且可能不会对这种功能提出太多要求。

【讨论】:

实际上列出的其他解决方案都不能在 Linux 上运行(除非您想花 800 美元购买商业驱动程序)。 MDB 工具可能“接近金属”,但它包含一个 unixODBC 驱动程序,可以使用 pyodbc onLinux 读取 Access db。谢谢你拯救了我的一天! 一个很棒的小程序!不过,很难找到各个实用程序的名称/文档,因此供参考:Linux 用户可以使用man mdb-,然后使用 tab 来获取自动完成列表;并且每个人都可以看到this Github repository中的txt文件。【参考方案10】:

如果您使用EQL Data 将您的数据库同步到网络,那么您可以使用 JSON 或 YAML 查询您的 Access 表的内容:http://eqldata.com/kb/1002。

那篇文章是关于 PHP 的,但它在 Python 中也同样适用。

【讨论】:

【参考方案11】:

您很可能会想要使用像SQLAlchemy 这样的好框架来访问您的数据,或者至少,我会推荐它。 Support for Access 是“实验性的”,但我记得使用它没有太多问题。它本身在后台使用pyodbc 连接到Access dbs,所以它应该可以在windows、linux、os x 和诸如此类的环境下工作。

【讨论】:

我只需要它来将数据导入到我的 SQLite 支持的 Storm 模型中。 :) SQLAlchemy + MS Access 不适用于 SQLAlchemy 0.5+,因为它的代码尚未更新。 使用了odbc,并没有首先解决访问物理数据库文件的问题。【参考方案12】:

pyodbc 怎么样? This SO question 演示了使用它可以读取 MS Access。

【讨论】:

以上是关于使用 Python 读取 Microsoft Access 数据库需要啥?的主要内容,如果未能解决你的问题,请参考以下文章

PwC AC 上海 - Senior Microsoft Power Platform Engineer

使用Python操纵具有链接和跟踪更改的Microsoft Word DOCX文件

cmd如何创建读取数据库文件

iis 部署 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序

从 configure.ac 中的文件读取版本号

如何在 C# 中读取 excel 文件而不使用 Microsoft.Office.Interop.Excel 库