34

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

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

我只需要读取权限。

4

12 回答 12

29

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

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

创建 Access mdb 文件:

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

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

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

于 2013-03-14T02:56:02.763 回答
23

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

于 2009-05-12T22:33:26.733 回答
10

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

于 2009-05-12T15:39:23.023 回答
10

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

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

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

于 2009-05-13T02:32:10.383 回答
5

在 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

我希望它有所帮助。

于 2014-06-07T11:01:31.820 回答
3

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

查看以下文章:

于 2013-08-09T20:48:15.407 回答
2

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

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

于 2014-09-10T20:06:12.237 回答
2

将 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 文件保存为位置 \FileStore\subfolder1\subfolder 中的“link_to_master.xlsx”。

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

于 2016-12-07T10:10:10.673 回答
1

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

于 2009-05-12T16:51:52.623 回答
0

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

于 2014-09-10T19:12:11.033 回答
0

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

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

于 2009-05-12T22:00:41.620 回答
0

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

我没试过在Linux下连接!

于 2016-11-29T12:15:10.313 回答