如何在 Python 中访问 Microsoft Access 数据库?用 SQL 吗?
我更喜欢适用于 Linux 的解决方案,但我也可以适应 Windows。
我只需要读取权限。
如何在 Python 中访问 Microsoft Access 数据库?用 SQL 吗?
我更喜欢适用于 Linux 的解决方案,但我也可以适应 Windows。
我只需要读取权限。
在 Linux 上,MDBTools 是您目前唯一的机会。[争议]
在 Windows 上,您可以使用 pypyodbc 处理 mdb 文件。
创建 Access mdb 文件:
import pypyodbc
pypyodbc.win_create_mdb( "D:\\Your_MDB_file_path.mdb" )
这是一个完全演示 pypyodbc 的访问支持功能的 Hello World 脚本。
免责声明:我是 pypyodbc 的开发者。
我已经使用PYODBC成功连接到Windows 上的 MS Access db 。安装很简单,使用也很简单,您只需要设置正确的连接字符串(列表中给出了 MS Access 的连接字符串),然后您就可以使用示例了。
pyodbc怎么样?这个 SO question演示了可以使用它来读取 MS Access。
你有一些听起来不错的解决方案。另一个可能比您想要的更接近“金属”的是 MDB Tools。
MDB Tools是一组开放源代码库和实用程序,可方便地从 MS Access 数据库(mdb 文件)导出数据,而无需使用 Microsoft DLL。因此非 Windows 操作系统可以读取数据。或者,换句话说,他们正在对 MDB 文件的布局进行逆向工程。
另请注意,我怀疑他们是否已经开始处理 ACCDB 文件,并且可能不会对该功能提出太多要求。
在 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
我希望它有所帮助。
老问题,但我想我会为 Windows 发布一个 pypyodbc 替代建议:ADO。事实证明,通过 COM 使用现代(而不是老式的 ODBC)驱动程序访问 Access 数据库、Excel 电子表格和其他任何东西真的很容易。
查看以下文章:
就个人而言,即使经过多次尝试,我也无法让 MDB 工具(以及相关的 ODBC 工具,如 unixODBC)在 Linux 下与 Python 或 PHP 一起正常工作。我只是在这里尝试了这个问题的另一个答案中的说明,我得到的只是“分段错误(核心转储)”。
但是,我确实获得了UCanAccess JDBC 驱动程序来从 Jython 或 CPython+JayDeBeApi 读取 Linux 上的 .mdb 和 .accdb 文件。有关如何在 Ubuntu 14.04 LTS 下进行设置的详细说明,请参阅我的其他答案。
将 Access 数据库读取为 pandas 数据框 (Windows)。
这是一个非常快速和简单的解决方案,我已经成功地用于较小的数据库。
您可以通过永久链接到 Excel 并保存该文件来读取 Access 数据库(需要单击几下),链接在这里:
然后,您可以简单地将该 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 之间的链接是静态的。
最有可能的是,您会想要使用像SQLAlchemy这样的优秀框架来访问您的数据,或者至少,我会推荐它。对 Access 的支持是“实验性的”,但我记得使用它没有太多问题。它本身在后台使用pyodbc连接到 Access dbs,因此它应该可以在 windows、linux、os x 等环境下工作。
如果您有空闲时间,可以尝试修复和更新这个通过本机 COM32 客户端 API 读取 MS-Access DB 的 python 类:Microsoft Access 的提取和操作类
如果您使用EQL Data将数据库同步到 Web ,那么您可以使用 JSON 或 YAML 查询您的 Access 表的内容:http: //eqldata.com/kb/1002。
那篇文章是关于 PHP 的,但它在 Python 中也同样适用。
我在 Windows 下将 Python 连接到 MS Access 的方式是使用这种方式:Connect to MS Access with Python。或许你能在Win 7上找到一些麻烦,所以我找到了一个解决方案:Solving a connection between MS Access and Python on Windows 7
我没试过在Linux下连接!