今天使用了tinyDB这个库不错呀。
地址:
https://github.com/msiemens/tinydb/blob/master/
1. create db
db = TinyDB('/tmp/db.json')
2. create table
table = db.table('user')
table2 = db.table('data')
3. 查询一共有几张表
db.tables()
set([u'_default', u'user', u'image'])
4. 增加数据
一次增加一条的方法:
table.insert({'age': 23, 'name': 'kiki'})
table.insert({'age': 8, 'name': 'nick'})
一次增加多条的方法:
table.insert_multiple([{'name': 'n1', 'age': 1},{'name': 'n2', 'age': 2},{'name': 'n3', 'age': 4}])
5. 查看现在有多少数据表
table.all()
结果:
[{u'age': 23, u'name': u'kiki'}, {u'age': 8, u'name': u'nick'}]
6. 看一个表当中的key 是否存在
from tinydb.queries import Query, where
table.contains(where('name'))
True
table.contains(where('year'))
False
7. 查询
Q = Query()
table.search( Q.name == 'nick' )
[{u'age': 8, u'name': u'nick'}]
查询一下 name 共有多少数据
table.search( Q.name )
[{u'age': 23, u'name': u'111'}, {u'age': 8, u'name': u'111'}, {u'age': 24, u'name': u'new1'}]
查询 name 个数
table.count( where('name') )
2
查询 name == 'nick' 的个数
table.count(where('name')=='nick')
1
表里共有多少条数据
len(table)
2
也可以用get 方法 这个方法只返回一个结果,结果可能是多个,如果用search就可返回多个结果
table.get(where('name')=='nick')
{u'age': 8, u'name': u'nick'}
查询子项
table.insert({'value':{'val':12}})
[{u'age': 23, u'name': u'111'}, {u'age': 8, u'name': u'111'}, {u'age': 24, u'name': u'new1'}, {u'value': {u'val': 12}}]
table.search(Q.value.val) # 用这样的方式可以直接找到
[{u'value': {u'val': 12}}]
查询里边的项大于多少可以直接写
table.search(Q.age>8)
[{u'age': 23, u'name': u'111'}, {u'age': 24, u'name': u'new1'}]
年龄!=23
table.search(~(Q.age==23))
[{u'age': 8, u'name': u'111'}, {u'age': 24, u'name': u'new1'}, {u'value': {u'val': 12}}]
查询年龄是8 或 23的人
table.search( (Q.age == 8) | (Q.age==23))
[{u'age': 23, u'name': u'111'}, {u'age': 8, u'name': u'111'}]
查询年龄是8 and 23的人
table.search( (Q.age==8)&(Q.age==23))
[]
查询一下是否这个key存在
table.search( Q.age.exists() )
[{u'age': 23, u'name': u'111'}, {u'age': 8, u'name': u'111'}, {u'age': 24, u'name': u'new1'}]
table.search( Q.year.exists() )
[]
这两个功能太酷了!!!!
正则搜索key
table.search(Q.name.search(r'[a-z]+'))
[{u'age': 24, u'name': u'new1'}, {u'age': 34, u'name': u'a12'}]
正则匹配
table.search(Q.name.matches(r'\d+'))
[{u'age': 23, u'name': u'111'}, {u'age': 8, u'name': u'111'}]
8. update 操作
当前的数据是
[{u'age': 23, u'name': u'kiki'}, {u'age': 8, u'name': u'nick'}]
运行更新一条记录
table.update({'name':'yzm'},where('age')==8)
[{u'age': 23, u'name': u'kiki'}, {u'age': 8, u'name': u'yzm'}]
更新所有的 name 为111
table.update({'name':'111'})
[{u'age': 23, u'name': u'111'}, {u'age': 8, u'name': u'111'}]
再增加两条数据用来测删除
>>> table.insert({'name':'new1','age':24})
3
>>> table.insert({'name':'new2','age':25})
9. 删除数据 name 等于 new2 的
table.remove(where('name')=='new2')
[{u'age': 23, u'name': u'111'}, {u'age': 8, u'name': u'111'}, {u'age': 24, u'name': u'new1'}]
看去对单张表操作基本无可挑剔了,多个表能不能联合查询呢,我没有看到,有时间再弄这个吧。