对于小型项目,是否有内置的SQLite(或类似方法)保持SQL / NoSQL的优点,即:
pip install <package>
)dict
,而无需为每行都具有通用的结构,例如NoSQL数据库例:
db = NoSQLite('test.db')
db.addrow({'name': 'john doe', 'balance': 1000, 'data': [1, 73.23, 18]})
db.addrow({'name': 'alice', 'balance': 2000, 'email': '[email protected]'})
for row in db.find('balance > 1500'):
print(row)
# {'id': 'f565a9fd3a', 'name': 'alice', 'balance': 2000, 'email': '[email protected]'} # id was auto-generated
注意:多年来,我一直惊讶于SQLite在几行代码中实际上有多少有趣的功能,这就是为什么我问我在这里描述的内容是否可以仅通过使用一些SQLite核心功能。
PS:可能看起来像一个解决方案,但实际上它只是一个持久的键/值存储,并且它不具有查询/ 功能; 也(BerkeleyDB的Python的)看起来过时,有一个类似的API没有查询功能。shelve
find
bsddb
可以通过使用JSON1扩展来查询存储在列中的JSON数据,是的:
sqlite> CREATE TABLE test(data TEXT);
sqlite> INSERT INTO test VALUES ('{"name":"john doe","balance":1000,"data":[1,73.23,18]}');
sqlite> INSERT INTO test VALUES ('{"name":"alice","balance":2000,"email":"[email protected]"}');
sqlite> SELECT * FROM test WHERE json_extract(data, '$.balance') > 1500;
data
--------------------------------------------------
{"name":"alice","balance":2000,"email":"[email protected]"}
如果您要查询大量相同的字段,可以通过在表达式上添加索引来提高效率:
CREATE INDEX test_idx_balance ON test(json_extract(data, '$.balance'));
将在上面的查询中使用该索引,而不是扫描每一行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句