ORM框架Peewee(二增)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/a6864657/article/details/100145234

单条增加

 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()

多条增加

  1. 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)
    
  2. 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)
    
  3. 使用原生的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 … 形式的,所以数据源的列跟要插入的列必须保持一致。

猜你喜欢

转载自blog.csdn.net/a6864657/article/details/100145234