一. 介绍及第一个案例
TinyDB是用纯python编写的NoSQL数据库,和SQLite数据库对应。SQLite是小型,嵌入式的关系型数据库,而TinyDB是小型嵌入式的NoSQL数据库,它不需要外部服务器,也没有任何依赖,使用json文件存储数据。
如果程序处理的数据不多,TinyDB正合适,不需要安装程序,也不需要配置环境,TinyDB很适合小型项目。
TinyDB官方文档:https://tinydb.readthedocs.io/en/latest/index.html
官方使用案例:https://pypi.org/project/tinydb/#example-code
使用前需要安装:pip3 install tinydb
第一个案例:
from tinydb import TinyDB, Query
db = TinyDB('data.json')
User = Query()
db.insert({
'name': 'John', 'age': 22})
search_data = db.search(User.name == 'John')
print(search_data)
二. 详细使用
1. 插入数据
from tinydb import TinyDB, Query
db = TinyDB('data.json')
# 一次写一条数据
db.insert({
'type': 'apple', 'count': 7})
el = db.insert({
"type": "peach", "count": 3})
print(el) # 返回key
'''
1、传入的数据形式应该是字典:{数据}
2、{数据}作为value被传入,对应的key是 '1'、'2'、'3'...,依次排下去
json文件的内容:
{"_default": {
"1": {"type": "apple", "count": 7},
"2": {"type": "peach", "count": 3}}
}
'''
# 一次写多条数据
# 用列表一次传多条数据,列表的元素是字典: [{},{},{}]
em = db.insert_multiple(
[
{
'name': 'John', 'age': 22},
{
'name': 'John', 'age': 22},
{
"type": "peach", "count": 3}
]
)
print(em) # 一次写多条,返回的是列表
2. 读数据
from tinydb import TinyDB, Query
db = TinyDB('data.json')
em = db.all()
for item in db:
print(item)
print(em) # 一次写多条,返回的是列表
3. 查询数据
from tinydb import TinyDB, Query
db = TinyDB('data.json')
Q = Query()
# 查询 (==, !=, >, >=, <, <=)
db.search(Q.type == 'apple')
db.insert({
'名字': '桃子'})
p = db.search(Q.名字 == '桃子')
print(p)
4. 更改数据
from tinydb import TinyDB, Query
db = TinyDB('data.json')
Q = Query()
db.update({
'名字':'苹果'}, Q.名字 =='桃子')
print(db.all())
5. 删除数据
from tinydb import TinyDB, Query
db = TinyDB('data.json')
Q = Query()
a = db.remove(Q.名字 == '苹果')
print(db.all())
三. 综合案例
1. 创建,插入,查询,删除和更新操作
from tinydb import TinyDB, Query, where
db = TinyDB('db.json')
# 插入两条数据
db.insert({
'name': 'John', 'age': 22})
db.insert({
'name': 'apple', 'age': 7})
# 输出所有记录
print(db.all())
# [{u'age': 22, u'name': u'John'}, {u'age': 7, u'name': u'apple'}]
# 查询
User = Query()
print(db.search(User.name == 'apple'))
# [{u'age': 7, u'name': u'apple'}]
# 查询
print(db.search(where('name') == 'apple'))
# 更新记录
db.update({
'age': 11}, where('name') == 'apple')
# [{u'age': 10, u'name': u'apple'}]
# 删除age大于20的记录
db.remove(where('age') > 20)
# 清空数据库
# db.purge()
2. 插入并读取
from tinydb import TinyDB, where
from tinydb.storages import MemoryStorage
def testBasicOperation():
def addone(x):
x['int'] += 1
default_db = TinyDB('default.json')
real_table = default_db.table("real")
print("{a}打开了数据库{tablename}{a}".format(
a="*" * 20, tablename=default_db.name))
default_db.insert({
'int': 1, 'char': 'a'})
default_db.insert({
'int': 2, 'char': 'b'})
default_db.insert({
'int': 3, 'char': 'c'})
default_db.insert({
'int': 4, 'char': 'd'})
real_table.insert({
'int': 5, 'char': 'e'})
real_table.insert({
'int': 6, 'char': 'f'})
real_table.insert({
'int': 7, 'char': 'g'})
real_table.insert({
'int': 8, 'char': 'h'})
# print('进行对每一个元素打印的操作:')
# default_db.process_elements(lambda data, doc_id: print(data[doc_id]))
print("deafult_db中每一个int字段加1")
default_db.update(addone)
# print('进行对每一个元素打印的操作:')
# default_db.process_elements(lambda data, doc_id: print(data[doc_id]))
print("default_db中有的所有表段为:", default_db.tables())
print("default_db中所有的数据为:", default_db.all())
# default_db.purge_tables()
# print("{a}清除了所有表{a}".format(a="*" * 20))
# print("db中有的所有表段为:", default_db.tables())
# print("default_db中所有的数据为:", default_db.all())
print("{a}关闭了表{tablename}{a}".format(
a="*" * 20, tablename=default_db.name))
default_db.close()
def testMemoryStorage():
db = TinyDB(storage=MemoryStorage)
db.insert({
'data': 5})
print(db.search(where('data') == 5))
# testMemoryStorage()
testBasicOperation()