相关文章推荐

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

35 人关注

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

我更倾向于使用Linux的解决方案,但我也可以满足于Windows。

我只需要读取权限。

python
linux
ms-access
python-module
Georg Schölly
Georg Schölly
发布于 2009-05-12
12 个回答
pypyodbc
pypyodbc
发布于 2016-11-29
已采纳
0 人赞同

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

在Windows上,你可以用pypyodbc来处理mdb文件。

要创建一个Access mdb文件。

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

下面是一个 "你好,世界 "脚本充分展示了pypyodbc的访问支持功能。

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

根据你的主页 it runs on linux .
mdb的创建和压缩功能只在windows上运行,对于它的ODBC接口功能,它是跨平台的。
"在Linux上,MDBTools是你目前唯一的机会。" - 这已不再是事实。Jython和UCanAccess JDBC驱动是Linux(以及Mac OS,我想)下一个可行的替代方案。详情见另一个问题 here
Alex Boschmans
Alex Boschmans
发布于 2016-11-29
0 人赞同

I've used PYODBC 成功地连接到一个MS Access数据库 -- on Windows though .安装很容易,使用也相当简单,你只需要设置正确的连接字符串(MS Access的连接字符串在列表中给出),然后你就可以按照例子进行操作。

注意这个问题说的是linux,而你礼貌地提到了windows。linux的正确答案(来自一个pyodbc开发者)如下 stackoverflow.com/a/15400363/638649
Tony Toews
Tony Toews
发布于 2016-11-29
0 人赞同

你已经有了一些听起来不错的解决方案。 另一个可能比你想的更接近 "金属 "的是MDB工具。

MDB Tools 是一套开源的库和工具,以方便从MS Access数据库(mdb文件)导出数据,而不使用微软的DLLs。因此,非Windows操作系统可以读取数据。 或者,换一种说法,他们是对MDB文件的布局进行逆向工程。

还要注意的是,我怀疑他们已经开始研究ACCDB文件,而且很可能不会有太多的要求来实现这种能力。

事实上,列出的其他解决方案都不能在Linux上工作(除非你想花800美元买一个商业驱动)。MDB Tools可能是 "接近金属 "的,但它包括一个unixODBC驱动,可以在Linux上使用pyodbc读取Access数据库。谢谢你救了我的命!
一个美妙的小程序! 不过,要找到各个实用程序的名称/文件有点难,所以供参考。 Linux用户可以使用 man mdb- ,然后用tab来获得自动完成的列表;而每个人都可以看到txt文件中的 this Github repository .
stuartd
stuartd
发布于 2016-11-29
0 人赞同

如何 pyodbc ? This SO question 证明了用它来读取MS Access是可能的。

Menda
Menda
发布于 2016-11-29
0 人赞同

在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

I hope it helped.

我相信 libmdbodbc1 现在被 odbc-mdbtool 取代了。至少我在Ubuntu 18.04上是这么做的。
@MartinThøgersen 我相信它叫做 odbc-mdbtools (s在最后)。
Erik Knowles
Erik Knowles
发布于 2016-11-29
0 人赞同

老问题了,但我想我应该发布一个用于Windows的pypyodbc替代建议。ADO。事实证明,通过COM获得Access数据库、Excel电子表格和其他任何具有现代(相对于老式ODBC)驱动程序的东西真的很容易。

请看以下文章。

  • http://www.mayukhbose.com/python/ado/index.php
  • http://www.markcarter.me.uk/computing/python/ado.html
  • http://www.ecp.cc/ado_examples.shtml
  • Gord Thompson
    Gord Thompson
    发布于 2016-11-29
    0 人赞同

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

    However, I did get the UCanAccess JDBC驱动可以在Linux上从Jython或CPython+JayDeBeApi读取.mdb和.accdb文件。关于我如何在Ubuntu 14.04 LTS下设置它的详细说明,请看我的另一个答案 here .

    Nico
    Nico
    发布于 2016-11-29
    0 人赞同

    最有可能的是,你会想使用一个漂亮的框架,如 SQLAlchemy 来访问你的数据,或者至少,我建议这样做。 支持访问 是 "实验性的",但我记得使用它时没有太多问题。它本身使用 pyodbc 在引擎盖下连接到Access数据库,所以它应该可以在windows、linux、os x和其他地方工作。

    我只需要它将数据导入我的SQLite支持的Storm模型。)
    Mike
    SQLAlchemy + MS Access对SQLAlchemy 0.5以上版本不起作用,因为它的代码还没有更新。
    使用odbc,这并没有首先解决访问物理数据库文件的问题。
    Tim0th1
    Tim0th1
    发布于 2016-11-29
    0 人赞同

    将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。

    Run the following in 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
    

    如果你要重新访问你的Python脚本,请考虑链接刷新的频率。 即Excel和Access之间的链接是静态的。

    apenwarr
    apenwarr
    发布于 2016-11-29
    0 人赞同

    如果你通过使用以下方法将你的数据库同步到网络上 EQL数据 然后,你可以使用JSON或YAML查询你的Access表的内容。 http://eqldata.com/kb/1002 .

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

    ankostis
    ankostis
    发布于 2016-11-29
    0 人赞同

    如果你有时间,你可以尝试修复和更新这个通过本地COM32-客户端API读取MS-Access数据库的python类。 适用于Microsoft Access的提取和操作类

     
    推荐文章