|
对于小项目,是否有内置项目?SQLite(或类似方法)保持SQL / NoSQL优点,即:
, B. m1 B" J, Y) m- a% E8 U) S存储 在 像SQLite这样 (平面)文件中 (没有客户端/服务器解决方案,没有需要安装的服务器;更准确的是,除了没有其他东西可以安装pip install )' i' L* q+ j2 N% ^( R% a) p! [
可将行存储为dict,而 不需要每行都有一个通用的结构,比如NoSQL数据库
# q F7 q- o# j8 ?支持简单查询例子:: o7 i6 ?5 X0 w" u K1 U
db = NoSQLite('test.db')db.addrow({'name': 'john doe','balance': 1000,'data': [1,73.23,18]})db.addrow({'name': 'alice','balance': 2000,'email': 'a@b.com'})for row in db.find('balance > print(row)# {'id': 'f565a9fd3a','name': 'alice','balance': 2000,'email': 'a@b.com'} # id was auto-generated注:这些年来,我一直很惊讶SQLite事实上,几行代码中有多少有趣的功能,这就是为什么我问我在这里描述的内容是否用SQLite可简单使用SQLite。一些SQLite核心功能。" W( }" ]" V6 _/ _
PS: 可能 看起来像一个解决方案,但实际上它只是一个持久的键/值存储,它没有查询/功能;
1 [5 ^5 }# Y! T: L9 ^也(BerkeleyDB的Python)看起来过时了,有一个类似的API没有查询功能。shelve
" h, U: V- e+ L5 j+ B__findbsddb& b2 _. \- R& I; }1 @+ M
1 M7 ?, i$ h& i, f2 l5 X+ a
解决方案:
+ G( c( p/ ^: C+ X7 f 可使用JSON1扩展查询列中存储的存储JSON数据,是的:
6 n# Y0 R! Y& g/ T3 y1 s8 i# @! Xsqlite> 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":"a@b.com"}');sqlite> SELECT * FROM test WHERE json_extract(data,'$.balance') > 1500;data--------------------------------------------------{"name":"alice","balance":2000,"email":"a@b.com"}若要查询大量相同的字段,可通过在表达式上添加索引来提高效率:
; I; ~; i8 }" z! sCREATE INDEX test_idx_balance ON test(json_extract(data,'$.balance'));索引将用于上述查询,而不是扫描每一行。 |
|