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

问题描述 投票:0回答:12

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

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

我只需要读取权限。

python linux ms-access python-module
12个回答
30
投票

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

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

创建 Access mdb 文件:

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

这里是一个 Hello World 脚本,它完全演示了 pypyodbc 的访问支持功能。

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


24
投票

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


12
投票

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

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

另请注意,我怀疑他们是否已经开始处理 ACCDB 文件,并且可能不会有太多对该功能的请求。


10
投票

pyodbc怎么样? This SO question demonstrates it's possible to read MS Access using it.


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

希望对您有所帮助。


3
投票

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

查看以下文章:


2
投票

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

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


1
投票

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


1
投票

将 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 之间的链接是静态的。


0
投票

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

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


0
投票

如果您有空闲时间,您可以尝试修复和更新这个通过本机 COM32 客户端 API 读取 MS-Access 数据库的 python 类:Microsoft Access 的提取和操作类


0
投票

我在 Windows 下连接 Python 和 MS Access 的方式是使用这种方式:使用 Python 连接到 MS Access。 也许你会在 Win 7 上发现一些问题,所以我找到了解决方案:Solving a connection between MS Access and Python on Windows 7

我没试过在Linux下连接!

© www.soinside.com 2019 - 2024. All rights reserved.