python tinyDB 简单使用

今天使用了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'}]
 

看去对单张表操作基本无可挑剔了,多个表能不能联合查询呢,我没有看到,有时间再弄这个吧。

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值