使用 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文件