跳转到主要内容

用于将SQLite数据库导入/导出到可比较目录结构的工具

项目描述

sqlite-diffable

PyPI Changelog License

用于将SQLite数据库导入/导出到可比较目录结构的工具

安装

pip install sqlite-diffable

演示

simonw/simonwillisonblog-backup 仓库中包含了我博客的数据库备份,https://simonwillison.net/ - 使用此工具创建。

导出数据库

给定一个名为 fixtures.db 的SQLite数据库,其中包含一个名为 facetable 的表,以下命令将此表导出到 dump/ 目录

sqlite-diffable dump fixtures.db dump/ facetable

要导出数据库中的所有表,使用 --all

sqlite-diffable dump fixtures.db dump/ --all

加载数据库

要加载先前导出的数据库,运行以下命令

sqlite-diffable load restored.db dump/

如果正在恢复的任何表已存在于数据库文件中,将显示错误。

您可以使用 --replace 选项替换这些表(在恢复之前先删除它们)

sqlite-diffable load restored.db dump/ --replace

转换为JSON对象

表行存储在 .ndjson 文件中,为换行符分隔的JSON数组,如下所示

["a", "a", "a-a", 63, null, 0.7364712141640124, "$null"]
["a", "b", "a-b", 51, null, 0.6020187290499803, "$null"]

有时使用JSON对象列表会更加方便。

sqlite-diffable objects 命令可以读取 .ndjson 文件及其相关的 .metadata.json 文件,并将JSON对象输出到标准输出

sqlite-diffable objects fixtures.db dump/sortable.ndjson

该命令的输出看起来像这样

{"pk1": "a", "pk2": "a", "content": "a-a", "sortable": 63, "sortable_with_nulls": null, "sortable_with_nulls_2": 0.7364712141640124, "text": "$null"}
{"pk1": "a", "pk2": "b", "content": "a-b", "sortable": 51, "sortable_with_nulls": null, "sortable_with_nulls_2": 0.6020187290499803, "text": "$null"}

使用 -o 将输出写入文件

sqlite-diffable objects fixtures.db dump/sortable.ndjson -o output.txt

添加 --array 参数,以输出一个包含对象的 JSON 数组,而不是换行分隔的文件。

sqlite-diffable objects fixtures.db dump/sortable.ndjson --array

输出

[
{"pk1": "a", "pk2": "a", "content": "a-a", "sortable": 63, "sortable_with_nulls": null, "sortable_with_nulls_2": 0.7364712141640124, "text": "$null"},
{"pk1": "a", "pk2": "b", "content": "a-b", "sortable": 51, "sortable_with_nulls": null, "sortable_with_nulls_2": 0.6020187290499803, "text": "$null"}
]

存储格式

每个表由两个文件表示。第一个文件,table_name.metadata.json,包含描述表结构的元数据。例如,对于一个名为 redirects_redirect 的表,该文件可能如下所示:

{
    "name": "redirects_redirect",
    "columns": [
        "id",
        "domain",
        "path",
        "target",
        "created"
    ],
    "schema": "CREATE TABLE [redirects_redirect] (\n   [id] INTEGER PRIMARY KEY,\n   [domain] TEXT,\n   [path] TEXT,\n   [target] TEXT,\n   [created] TEXT\n)"
}

它是一个具有三个键的对象:name 是表名,columns 是列字符串数组,而 schema 是用于该表的 SQL 架构文本。

第二个文件,table_name.ndjson,包含表中每行的 换行分隔的 JSON。每行表示为一个 JSON 数组,其项对应于元数据中定义的每个列。

对于 redirects_redirect.ndjson 表的该文件可能如下所示:

[1, "feeds.simonwillison.net", "swn-everything", "https://simonwillison.net/atom/everything/", "2017-10-01T21:11:36.440537+00:00"]
[2, "feeds.simonwillison.net", "swn-entries", "https://simonwillison.net/atom/entries/", "2017-10-01T21:12:32.478849+00:00"]
[3, "feeds.simonwillison.net", "swn-links", "https://simonwillison.net/atom/links/", "2017-10-01T21:12:54.820729+00:00"]

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

sqlite-diffable-0.5.tar.gz (8.6 kB 查看哈希值)

上传时间

构建分布

sqlite_diffable-0.5-py3-none-any.whl (9.2 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面