【发布时间】:2021-09-20 19:29:36
【问题描述】:
如何在 Python 中访问 Microsoft Access 数据库?使用 SQL?
我更喜欢适用于 Linux 的解决方案,但我也可以适应 Windows。
我只需要读取权限。
【问题讨论】:
标签: python linux ms-access python-module
如何在 Python 中访问 Microsoft Access 数据库?使用 SQL?
我更喜欢适用于 Linux 的解决方案,但我也可以适应 Windows。
我只需要读取权限。
【问题讨论】:
标签: python linux ms-access python-module
在 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 的开发者。
【讨论】:
我已使用 PYODBC 成功连接到 MS Access 数据库 - 在 Windows 上。安装很简单,使用也很简单,你只需要设置正确的连接字符串(MS Access 的连接在列表中),然后你就可以使用示例了。
【讨论】:
pyodbc 怎么样? This SO question 演示了使用它可以读取 MS Access。
【讨论】:
您已经找到了一些听起来不错的解决方案。另一个可能比您想要的更接近“金属”的是 MDB Tools。
MDB Tools 是一组开源库和实用程序,用于在不使用 Microsoft DLL 的情况下方便地从 MS Access 数据库(mdb 文件)导出数据。因此非 Windows 操作系统可以读取数据。或者,换句话说,他们正在对 MDB 文件的布局进行逆向工程。
另外请注意,我怀疑他们是否已经开始处理 ACCDB 文件,并且可能不会有太多对该功能的要求。
【讨论】:
man mdb-,然后使用 tab 来获取自动完成列表;并且大家可以看到this Github repository中的txt文件。
在 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 上的工作。
odbc-mdbtools(s at end)
老问题,但我想我会为 Windows 发布一个 pypyodbc 替代建议:ADO。事实证明,使用现代(与老式 ODBC)驱动程序通过 COM 访问 Access 数据库、Excel 电子表格和其他任何东西真的很容易。
查看以下文章:
【讨论】:
将 Access 数据库作为 pandas 数据框读取 (Windows)。
这是一个非常快速和简单的解决方案,我已成功地将其用于小型数据库。
您可以通过永久链接到 Excel 并保存该文件来读取 Access 数据库(需要点击几下),链接在这里:
然后,您可以将该 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 之间的链接是静态的。
【讨论】:
就个人而言,即使经过多次尝试,我也无法让 MDB 工具(以及相关的 ODBC 工具,如 unixODBC)在 Linux 下与 Python 或 PHP 一起正常工作。我刚刚尝试了这个问题here 的另一个答案中的说明,我得到的只是“分段错误(核心转储)”。
但是,我确实获得了UCanAccess JDBC 驱动程序,以便在 Linux 上从 Jython 或 CPython+JayDeBeApi 读取 .mdb 和 .accdb 文件。有关如何在 Ubuntu 14.04 LTS 下设置的详细说明,请参阅我的其他答案 here。
【讨论】:
很可能,您会想要使用像SQLAlchemy 这样的好框架来访问您的数据,或者至少,我会推荐它。 Support for Access 是“实验性的”,但我记得使用它没有太多问题。它本身在后台使用pyodbc 连接到Access dbs,因此它应该可以在windows、linux、os x 和诸如此类的环境下工作。
【讨论】:
如果您使用EQL Data 将您的数据库同步到网络,那么您可以使用 JSON 或 YAML 查询您的 Access 表的内容:http://eqldata.com/kb/1002。
那篇文章是关于 PHP 的,但它在 Python 中也同样适用。
【讨论】:
如果您有空闲时间,可以尝试修复和更新这个通过本机 COM32 客户端 API 读取 MS-Access DB 的 python 类:Extraction and manipulation class for Microsoft Access
【讨论】:
我在 Windows 下将 Python 连接到 MS Access 的方式是使用这种方式:Connect to MS Access with Python。 或许你在Win 7上能找到一些麻烦,所以我找到了解决办法:Solving a connection between MS Access and Python on Windows 7
我没试过在Linux下连接!
【讨论】: