TinyDB的基于Git的存储后端。
tinydb-git的Python项目详细描述
tinydb的存储后端,将数据库更改存储在git中 分支。
tinydb-git允许您将git存储库中的任何分支用作 tinydb
hiro@wintermute:tmp$ git init example Initialized empty Git repository in /tmp/example/.git/
对数据库的每次修改都会导致新的提交:
>>> importtinydb>>> fromtinydb_git.jsonimportJSONGitStorage>>> db=tinydb.TinyDB('example',storage=JSONGitStorage)>>> db.insert({'text':'first record'})1
hiro@wintermute:example$ git log commit de9a07844783b8e420fce6f9568e126dd7779e74 Updated by tinydb-git 0.1.dev1 commit 3b31825cf312cb5d42f792998faddf20b634c7d9 Updated by tinydb-git 0.1.dev1
多次调用insert()将导致每次调用的提交。这可能是 通过使用tinyrecord事务避免:
>>> fromtinyrecordimporttransaction>>> withtransaction(db.table('_default'))ast:... t.insert({'b':2})... t.insert({'c':3})... t.insert({'d':4})...>>>
结果是:
hiro@wintermute:example$ git log commit e02a3af06d7cd7eeb6990277777cc24d384249e8 Updated by tinydb-git 0.1.dev1 commit de9a07844783b8e420fce6f9568e126dd7779e74 Updated by tinydb-git 0.1.dev1 commit 3b31825cf312cb5d42f792998faddf20b634c7d9 Updated by tinydb-git 0.1.dev1
在内部,数据以json的形式存储,使用sort_keys=True和indent=2, 为了使diff更易于阅读并有助于压缩:
hiro@wintermute:example$ git diff master^ master diff --git a/tinydb.json b/tinydb.json index a27ff44..d9711f0 100644 --- a/tinydb.json +++ b/tinydb.json @@ -2,6 +2,15 @@ "_default": {"1": {"text": "first record" + }, + "2": { + "b": 2 + }, + "3": { + "c": 3 + }, + "4": { + "d": 4}}}\ No newline at end of file
山药
或者,数据可以存储为yaml,它允许 日期时间-要正确表示的实例:
>>> importtinydb>>> fromtinydb_git.yamlimportYAMLGitStoroage>>> db=tinydb.TinyDB('example',storage=YAMLGitStoroage)