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

2025-01-21 09:01:00
admin
原创
84
摘要:问题描述:我想访问 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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用