版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
单条增加
User.create(user_name='zhansan', wo_no=1024)
也可以构造一个key: value 的字典,最后使用(返回值插入条数
)
data = {'user_name': 'zhansan', 'wo_no': 1024}
User.create(**data)
User.insert(User_name='lisi', wo_no=1000).execute() (返回 主键值,一般为id)
等同于insert into User (user_name, wo_no) values ('lisi', 1024)
user_info = User(user_name='zhansan', birthday=date(2011, 1, 15), is_relative=True)`
user_info .save()
调用save()方法之后,数据会被插入到数据库中,返回此操作影响的数据数量
如果要更新数据,直接修改实例属性值即可:
user_info .user_name = 'wangwu'
user_info .save()
多条增加
-
for循环和
Model.create()
(最慢)data_source = [ {'user_name': 'zhangsan', 'wo_no': 2019060501}, {'user_name': 'lisi', 'wo_no': 2019060502}, ] for data_dict in data_source: User.create(**data_dict)
-
for循环和
Model.create()
,并放入事务
中(较快)data_source = [ {'user_name': 'zhangsan', 'wo_no': 2019060501}, {'user_name': 'lisi', 'wo_no': 2019060502}, ] with database.atomic(): for data_dict in data_source: User.create(**data_dict)
-
使用原生的
insert_many()
,并放入事务
中(最快)insert_many(rows, fields=None)
参数:
rows:
元组或字典列表,要插入的数据
fields(list):
需要插入的字段名(可传可不传,如传列表rows 中的字段在字典中必须存在。data_source = [ {'user_name': 'zhangsan', 'wo_no': 2019060501}, {'user_name': 'lisi', 'wo_no': 2019060502}, ] with database.atomic(): User.insert_many(data_source).execute()
如果数据量太大或许你需要分开处理,比如一次处理100条:
data_source = [
{'user_name': 'zhangsan', 'wo_no': 2019060501},
{'user_name': 'lisi', 'wo_no': 2019060502},
]
with database.atomic():
for idx in range(0,len(data_source),100):
User.insert_many(data_source[idx:idx+100]).execute()
Peewee分块辅助函数 chunked()
,使用它可以有效地将通用迭代块分块为一系列批量迭代的迭代:
from peewee import chunked
# 一次插入 100 行.
with db.atomic():
for batch in chunked(data, 100):
User.insert_many(batch).execute()
insert_from
使用 SELECT 查询作为源 INSERT 数据。此 API 应用于 INSERT INTO … SELECT FROM … 形式的查询
扫描二维码关注公众号,回复:
7570505 查看本文章
insert_from(query, fields)
query
:SELECT查询用作数据源
fields
:要将数据插入的字段,此参数必须要的 **
示例: 我们将 Person 表按原结构复制一个 Person2 表出来,以做演示
data = Person.select(Person.Name, Person.Age, Person.Birthday)
Person2.insert_from(data, ['Name', 'Age', 'Birthday']).execute()
注意: 因为是 INSERT INTO … SELECT FROM … 形式的,所以数据源的列跟要插入的列必须保持一致。