alchemy-utils 0.1a0:面向多数据库的 Python 工具原型
Simon Willison7 天前
alchemy-utils 0.1a0:面向多数据库的 Python 工具原型
alchemy-utils 0.1a0 是一个面向多种数据库的 Python 库和命令行工具原型。它尝试以 SQLAlchemy 为后端,提供类似 sqlite-utils 的核心 API,从而支持不同数据库引擎。
目前的设计重点包括:
insert和upsertinsert_all和upsert_allcreate和update- 数据表结构 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 开发者来说,它提供了一个值得关注的实验方向。
