在非 Windows 平台(Linux 或 Mac)上使用 Python 访问数据库

2025-01-21 09:01:00
admin
原创
129
摘要:问题描述:我想访问 Microsoft Access 数据库中的数据。我有一些 .accdb 和 .mdb 文件,想用 Python 读取它们。据我研究,pyodbc 只能在 Windows 平台上使用,但我在 Mac OS X 上工作。我是 Python 新手。另一个选择是,我可以将数据从数据库导出到 cs...

问题描述:

我想访问 Microsoft Access 数据库中的数据。我有一些 .accdb 和 .mdb 文件,想用 Python 读取它们。

据我研究,pyodbc 只能在 Windows 平台上使用,但我在 Mac OS X 上工作。我是 Python 新手。

另一个选择是,我可以将数据从数据库导出到 csv,然后在 python 中使用。

任何帮助或开始都将非常感激。


解决方案 1:

在 Mac OSx 和 Ubuntu 18.04 上,你可以使用pandas_access

来自文档:

import pandas_access as mdb

db_filename = 'my_db.mdb'

# Listing the tables.
for tbl in mdb.list_tables(db_filename):
  print(tbl)

# Read a small table.
df = mdb.read_table(db_filename, "MyTable")

在 Ubuntu 上你可能需要运行:

sudo apt install mdbtools

解决方案 2:

“根据我的研究,pyodbc 只能在 Windows 平台上使用”

不对。pyodbc 主页上说

为 Windows 和 macOS 上的大多数 Python 版本提供了预编译的二进制轮子。在其他操作系统上,[pip install pyodbc] 将从源代码构建。

然而,使用 ODBC 操作Access 数据库主要是在 Windows 上进行的,这一点毋庸置疑。“MDB 工具”和“unixODBC”经常被提及作为在非 Windows 平台上操作 Access 数据库的一种方式,但它有其局限性。

当然,您始终可以为非 Windows 平台购买第三方 MS Access ODBC 驱动程序,但如果您想要免费的开源解决方案,则可以使用UCanAccess JDBC 驱动程序。

前往Maven Central 上的 UCanAccess,浏览最新版本,并下载 uber.jar 文件。

使用 JayDeBeApi

您可以使用 安装 JayDeBeApi pip

如果您尚未安装 JRE(Java 运行时环境),那么您也需要它。(我sudo apt install default-jre在 Ubuntu 上使用过。)

一旦所需的组件到位,您就应该能够使用如下代码:

import jaydebeapi

db_path = "/home/gord/test.accdb"
classpath = "/home/gord/Downloads/ucanaccess-5.1.2-uber.jar"
cnxn = jaydebeapi.connect(
    "net.ucanaccess.jdbc.UcanaccessDriver",
    f"jdbc:ucanaccess://{db_path};newDatabaseVersion=V2010",
    ["", ""],
    classpath
    )
crsr = cnxn.cursor()
try:
    crsr.execute("DROP TABLE table1")
    cnxn.commit()
except jaydebeapi.DatabaseError as de:
    if "user lacks privilege or object not found: TABLE1" in str(de):
        pass
    else:
        raise
crsr.execute("CREATE TABLE table1 (id COUNTER PRIMARY KEY, fname TEXT(50))")
cnxn.commit()
crsr.execute("INSERT INTO table1 (fname) VALUES ('Gord')")
cnxn.commit()
crsr.execute("SELECT * FROM table1")
for row in crsr.fetchall():
    print(row)
crsr.close()
cnxn.close()

解决方案 3:

对于将旧的 .mdb 文件一次性转换为 .sqlite,我发现这个网站很有帮助:https ://www.rebasedata.com/convert-mdb-to-sqlite-online 。我与它没有任何关系,这只是当这里没有答案对我有用时我最终选择的方法。他们提供了一个 curl 命令:

curl -F files[]=@database.ext 'https://www.rebasedata.com/api/v1/convert?outputFormat=sqlite&errorResponse=zip' -o output.zip

解决方案 4:

我对 有疑问pandas-access,这是最佳答案所推荐的。

正如许多其他答案指出的那样,使用 pyodbc 的问题在于,在 macos 上获取 pyodbc 的 mdb 驱动程序并不是非常快捷、简单或便宜。

当然,在线工具要求您上传数据库,其中可能包含您不愿分享的数据。

因此,我最终自己包装了mdbtools,这很简单,如果您在这里找到自己,我决定分享它以防它有用。它需要一个 mdb 文件并导出 csv、excel 或 sqlite,具体取决于您的需求。完整的代码和文档位于此要点中。

我基本上只是包装了以下 3 个命令:

  1. mdb-tablesmdb-tables -d ", " MDB_FILE

  2. mdb-export:重要的是,这可以导出 csv(默认),但也可以导出到其他后端,例如通过 -I 导出到 sqlite,例如mdb-export -I sqlite MDB_FILE TABLE_NAME

  3. mdb-schema:这也可以采用后端(例如 sqlite):mdb-schema --indexes --relations --default-values --not-null MDB_FILE -T TABLE_NAME sqlite

解决方案 5:

这个问题很老了,但文档说:

最简单的安装方法是使用 pip。将下载 Windows 二进制文件,但其他操作系统需要从源代码进行编译。

所以应该是可以的。还有一个针对 Linux 机器的示例。

http://mkleehammer.github.io/pyodbc/#connecting

但请检查源代码中的这部分。

https://github.com/mkleehammer/pyodbc/blob/master/tests2/accesstests.py#L630,L636

它向您展示了 MS Access 文件的连接字符串是什么样的。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2796  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1710  
  PLM系统在企业项目管理中扮演着至关重要的角色,尤其是在项目采购管理方面,能够通过一系列策略提升采购效率、降低成本并保障质量。通过深入解析相关策略,企业可以更好地利用PLM系统优化采购流程,实现项目的顺利推进与整体目标的达成。需求精准定义策略在项目采购中,明确需求是首要任务。PLM系统可助力企业精准定义采购需求。首先,...
plm是什么意思   8  
  在企业的运营过程中,跨部门数据共享一直是一个关键且颇具挑战的问题。不同部门之间由于业务差异、系统不兼容等多种因素,常常形成信息孤岛,导致数据无法顺畅流通,影响企业整体的决策效率和协同效果。而 PLM 系统作为一种先进的管理工具,为解决这一难题提供了有效的途径。通过其一系列强大的核心功能,能够打破部门之间的数据壁垒,实现...
plm系统   7  
  PLM(产品生命周期管理)项目涉及产品从概念设计到退役的全流程管理,其复杂性和长期性要求高效的项目进度管理工具。甘特图作为一种直观且实用的项目进度可视化工具,在PLM项目中发挥着关键作用。通过甘特图,项目团队成员能够清晰地了解项目任务的时间安排、进度状态以及各项任务之间的关系,从而更好地协调工作、分配资源,确保项目按计...
plm流程是什么   6  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用