用于将SQLite数据库导入/导出到可比较目录结构的工具
项目描述
sqlite-diffable
用于将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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 32acbb6bb19c32261a6f949cbec9159c6bb88ae2e40f4f9c6226e1edac8f7539 |
|
MD5 | 958386dbf168220b995b593686135365 |
|
BLAKE2b-256 | 9332552a26ce1ad0aec53afdcbed8b31166d6e5261417facc6e7c1fb8d43ba88 |
sqlite_diffable-0.5-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 84357bc86eaa36f780754d22b669aa7b03f35392d80669b048f955886e30949c |
|
MD5 | e099eff9039a8217aad28fa7e18521dc |
|
BLAKE2b-256 | 0eedf1cf8ceb5c259d23d6192c5c5a6215fff087337a23ca65445a29f20ca075 |