如何在 Python 中访问 Microsoft Access 数据库?用SQL吗?
我更倾向于使用Linux的解决方案,但我也可以满足于Windows。
我只需要读取权限。
在Linux上,MDBTools是你目前唯一的机会。 [disputed]
在Windows上,你可以用pypyodbc来处理mdb文件。
要创建一个Access mdb文件。
import pypyodbc pypyodbc.win_create_mdb( "D:\\Your_MDB_file_path.mdb" ) 下面是一个 "你好,世界 "脚本充分展示了pypyodbc的访问支持功能。 免责声明:我是pypyodbc的开发者。
下面是一个 "你好,世界 "脚本充分展示了pypyodbc的访问支持功能。
免责声明:我是pypyodbc的开发者。
Georg Schölly :
根据你的主页 it runs on linux .
pypyodbc :
mdb的创建和压缩功能只在windows上运行,对于它的ODBC接口功能,它是跨平台的。
goutham2027 :
on Linux mdbtools. Check codeenigma.com/community/blog/... 和 nialldonegan.me/2007/03/10/...
Gord Thompson :
"在Linux上,MDBTools是你目前唯一的机会。" - 这已不再是事实。Jython和UCanAccess JDBC驱动是Linux(以及Mac OS,我想)下一个可行的替代方案。详情见另一个问题 here
Alex Boschmans 发布于 2016-11-29
0 人赞同
I've used PYODBC 成功地连接到一个MS Access数据库 -- on Windows though .安装很容易,使用也相当简单,你只需要设置正确的连接字符串(MS Access的连接字符串在列表中给出),然后你就可以按照例子进行操作。
matchew :
注意这个问题说的是linux,而你礼貌地提到了windows。linux的正确答案(来自一个pyodbc开发者)如下 stackoverflow.com/a/15400363/638649
Tony Toews 发布于 2016-11-29
你已经有了一些听起来不错的解决方案。 另一个可能比你想的更接近 "金属 "的是MDB工具。 MDB Tools 是一套开源的库和工具,以方便从MS Access数据库(mdb文件)导出数据,而不使用微软的DLLs。因此,非Windows操作系统可以读取数据。 或者,换一种说法,他们是对MDB文件的布局进行逆向工程。 还要注意的是,我怀疑他们已经开始研究ACCDB文件,而且很可能不会有太多的要求来实现这种能力。
你已经有了一些听起来不错的解决方案。 另一个可能比你想的更接近 "金属 "的是MDB工具。
MDB Tools 是一套开源的库和工具,以方便从MS Access数据库(mdb文件)导出数据,而不使用微软的DLLs。因此,非Windows操作系统可以读取数据。 或者,换一种说法,他们是对MDB文件的布局进行逆向工程。
还要注意的是,我怀疑他们已经开始研究ACCDB文件,而且很可能不会有太多的要求来实现这种能力。
atereshkin :
事实上,列出的其他解决方案都不能在Linux上工作(除非你想花800美元买一个商业驱动)。MDB Tools可能是 "接近金属 "的,但它包括一个unixODBC驱动,可以在Linux上使用pyodbc读取Access数据库。谢谢你救了我的命!
Xavier Holt :
一个美妙的小程序! 不过,要找到各个实用程序的名称/文件有点难,所以供参考。 Linux用户可以使用 man mdb- ,然后用tab来获得自动完成的列表;而每个人都可以看到txt文件中的 this Github repository .
man mdb-
stuartd 发布于 2016-11-29
如何 pyodbc ? This SO question 证明了用它来读取MS Access是可能的。
Menda 发布于 2016-11-29
在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.
在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.
跟着安装一些额外的驱动程序。
$ 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.
做一个小测试程序,连接到数据库并显示所有的表。
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.
I hope it helped.
Martin Thøgersen :
我相信 libmdbodbc1 现在被 odbc-mdbtool 取代了。至少我在Ubuntu 18.04上是这么做的。
libmdbodbc1
odbc-mdbtool
perlyking :
@MartinThøgersen 我相信它叫做 odbc-mdbtools (s在最后)。
odbc-mdbtools
Erik Knowles 发布于 2016-11-29
老问题了,但我想我应该发布一个用于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
老问题了,但我想我应该发布一个用于Windows的pypyodbc替代建议。ADO。事实证明,通过COM获得Access数据库、Excel电子表格和其他任何具有现代(相对于老式ODBC)驱动程序的东西真的很容易。
请看以下文章。
Gord Thompson 发布于 2016-11-29
就我个人而言,我从未能够让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 .
就我个人而言,我从未能够让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 发布于 2016-11-29
最有可能的是,你会想使用一个漂亮的框架,如 SQLAlchemy 来访问你的数据,或者至少,我建议这样做。 支持访问 是 "实验性的",但我记得使用它时没有太多问题。它本身使用 pyodbc 在引擎盖下连接到Access数据库,所以它应该可以在windows、linux、os x和其他地方工作。
我只需要它将数据导入我的SQLite支持的Storm模型。)
Mike :
SQLAlchemy + MS Access对SQLAlchemy 0.5以上版本不起作用,因为它的代码还没有更新。
oligofren :
使用odbc,这并没有首先解决访问物理数据库文件的问题。
Tim0th1 发布于 2016-11-29
将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之间的链接是静态的。
将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之间的链接是静态的。
如果你要重新访问你的Python脚本,请考虑链接刷新的频率。 即Excel和Access之间的链接是静态的。
apenwarr 发布于 2016-11-29
如果你通过使用以下方法将你的数据库同步到网络上 EQL数据 然后,你可以使用JSON或YAML查询你的Access表的内容。 http://eqldata.com/kb/1002 . 那篇文章是关于PHP的,但它在Python中也同样适用。
如果你通过使用以下方法将你的数据库同步到网络上 EQL数据 然后,你可以使用JSON或YAML查询你的Access表的内容。 http://eqldata.com/kb/1002 .
那篇文章是关于PHP的,但它在Python中也同样适用。
ankostis 发布于 2016-11-29
如果你有时间,你可以尝试修复和更新这个通过本地COM32-客户端API读取MS-Access数据库的python类。 适用于Microsoft Access的提取和操作类