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)

参考文档

posted @ 2021-01-27 14:07  鲁哒哒  阅读(77)  评论(0编辑  收藏  举报