3.ORM模块-peewee
插入数据
插入方式:
- 普通插入
- 原子性插入
- 大量插入
插入方法:
- get_or_create
普通插入
- Model
数据库表名 - data
数据库字段的字典
data = [
{'field1': 'val1-1', 'field2': 'val1-2'},
{'field1': 'val2-1', 'field2': 'val2-2'},
# ...
]
for data_dict in data :
Model.create(**data_dict)
以上方法较慢,有如下原因:
- 循环调用create方法,都会提交事务,提交耗时过长。
原子性插入
原子操作中包装而得到显著的速度提升
# This is much faster.
with db.atomic():
for data_dict in data_source:
Model.get_or_create(**data_dict)
推荐切割存储
大量插入
切割数据源,分次存储
data_source = [
{'field1': 'val1-1', 'field2': 'val1-2'},
{'field1': 'val2-1', 'field2': 'val2-2'},
# ...
]
# Insert rows 1000 at a time.
with db.atomic():
for idx in range(0, len(data_source), 1000):
Model.insert_many(data_source[idx:idx+1000]).execute()
# Insert rows 100 at a time.
with database.atomic():
for batch in chunked(data_source, 10000):
Network.insert_many(batch).execute()
新建
查询
- select
查询无返回None,有返回结果
service = Services_tcp.select().where(Services_tcp.uid == source_uid).get()
-
get
-
get_or_none
查询无报错,有返回结果
表名.get_or_none(字段='xx')
例如:
查询AccessRule 表的所有uid
for rule in AccessRule.select():
print(rule.uid)