回答

收藏

平面文件NoSQL解决方案

技术问答 技术问答 248 人阅读 | 0 人回复 | 2023-09-14

对于小项目,是否有内置项目?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'));索引将用于上述查询,而不是扫描每一行。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则