alchemy-utils 0.1a0:面向多数据库的 Python 工具原型

Simon Willison7 天前

alchemy-utils 0.1a0:面向多数据库的 Python 工具原型

alchemy-utils 0.1a0 是一个面向多种数据库的 Python 库和命令行工具原型。它尝试以 SQLAlchemy 为后端,提供类似 sqlite-utils 的核心 API,从而支持不同数据库引擎。

目前的设计重点包括:

  • insertupsert
  • insert_allupsert_all
  • createupdate
  • 数据表结构 introspection(检查表结构)
  • 面向数据库的命令行操作

项目目前针对 PostgreSQL、SQLite 和 DuckDB 进行测试,并以 alpha 版本形式发布。

PostgreSQL 示例

下面的命令可以列出 PostgreSQL 数据库中某张表的行:

uvx --with 'alchemy-utils[postgresql]' alchemy-utils rows \
  'postgresql+psycopg://simon@localhost:5432/simonwillisonblog' \
  redirects_redirect

输出为 JSON 数组,例如:

[
  {
    "id": 2328,
    "domain": "simonwillison.net",
    "path": "2020/May/21/apple-photos-sqlite/",
    "target": "/2020/May/21/dogsheep-photos/",
    "created": "2020-05-21T13:03:46.591692-07:00"
  },
  {
    "id": 3,
    "domain": "feeds.simonwillison.net",
    "path": "swn-links",
    "target": "https://simonwillison.net/atom/links/",
    "created": "2017-10-01T14:12:54.820729-07:00"
  }
]

DuckDB 导入 CSV

工具也可以根据 CSV 文件自动创建匹配的表结构,并将数据写入 DuckDB:

cat Street_Tree_List.csv | uvx --with 'alchemy-utils[duckdb]' \
  alchemy-utils insert 'duckdb:////tmp/trees.db' trees - --csv

在一个包含旧金山所有树木记录的 CSV 数据集测试中,首次导入耗时接近一小时。经过优化后,同一过程耗时降至约 35 秒。

项目定位

这个版本仍处于早期 alpha 阶段,但已经覆盖了跨数据库操作的基本路径:使用统一 API 操作数据表,并通过 SQLAlchemy 连接不同数据库引擎。对于需要在 PostgreSQL、SQLite 和 DuckDB 之间迁移数据处理脚本的 Python 开发者来说,它提供了一个值得关注的实验方向。

评论

请登录后发表观点

暂无数据