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

2025-01-21 09:01:00
admin
原创
126
摘要:问题描述:我想访问 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2787  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1710  
  产品配置管理在企业产品研发与生产过程中扮演着至关重要的角色,它能够确保产品在不同阶段的一致性、可追溯性以及高效的变更管理。PLM(产品生命周期管理)系统作为整合产品全生命周期信息的平台,为产品配置管理提供了强大的支持。随着技术的不断发展,到2025年,PLM系统在支持产品配置管理方面将有一系列值得关注的技术实践。基于人...
plm系统主要干什么的   11  
  敏捷迭代周期与 PLM 流程的适配是现代企业在产品开发过程中面临的重要课题。随着市场竞争的加剧和技术的快速发展,企业需要更加高效、灵活的产品开发模式,以满足客户不断变化的需求。敏捷迭代周期强调快速响应变化、持续交付价值,而 PLM 流程则侧重于产品全生命周期的管理和控制。如何将两者有机结合,优化交付节奏,成为提升企业竞...
plm是什么意思   10  
  在企业的数字化转型进程中,PLM(产品生命周期管理)与ERP(企业资源计划)作为两款重要的企业级系统,发挥着关键作用。然而,很多企业人员对它们之间的区别以及协同逻辑并不十分清晰。深入了解这两者的差异与协同方式,有助于企业更好地规划信息化建设,提升整体运营效率。PLM系统概述PLM系统聚焦于产品从概念设计到退役的全生命周...
国产plm软件   12  
热门文章
项目管理软件有哪些?
曾咪二维码

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用