Peewee – 插入一条新记录
在Peewee中,有多个命令可以在表中添加一条新的记录。我们已经使用了模型实例的save()方法。
rec1=User(name="Rajesh", age=21)
rec1.save()
Peewee.Model类也有一个create()方法,可以创建一个新的实例并在表中添加其数据。
User.create(name="Kiran", age=19)
除此之外,Model也有 insert() 类方法,构建SQL插入查询对象。查询对象的 execute() 方法执行在底层表中添加一条记录。
q = User.insert(name='Lata', age=20)
q.execute()
查询对象是一个等价的INSERT查询。q.sql()返回查询字符串。
print (q.sql())
('INSERT INTO "User" ("name", "age") VALUES (?, ?)', ['Lata', 20])
下面是完整的代码,演示了上述插入记录方式的使用。
from peewee import *
db = SqliteDatabase('mydatabase.db')
class User (Model):
name=TextField()
age=IntegerField()
class Meta:
database=db
db_table='User'
db.create_tables([User])
rec1=User(name="Rajesh", age=21)
rec1.save()
a=User(name="Amar", age=20)
a.save()
User.create(name="Kiran", age=19)
q = User.insert(name='Lata', age=20)
q.execute()
db.close()
我们可以在SQLiteStudio GUI中验证结果。
批量插入
为了在表中一次使用多条记录,Peewee提供了两种方法: bulk_create 和 insert_many。
insert_many()
insert_many()方法生成等效的INSERT查询,使用字典对象的列表,每个对象有一个字段值对。
rows=[{"name":"Rajesh", "age":21}, {"name":"Amar", "age":20}]
q=User.insert_many(rows)
q.execute()
这里也是如此,q.sql()返回的INSERT查询字符串如下所示
print (q.sql())
('INSERT INTO "User" ("name", "age") VALUES (?, ?), (?, ?)', ['Rajesh', 21, 'Amar', 20])
bulk_create()
这个方法接收一个列表参数,包含一个或多个映射到表的未保存的模型实例。
a=User(name="Kiran", age=19)
b=User(name='Lata', age=20)
User.bulk_create([a,b])
以下代码使用这两种方法来执行批量插入操作。
from peewee import *
db = SqliteDatabase('mydatabase.db')
class User (Model):
name=TextField()
age=IntegerField()
class Meta:
database=db
db_table='User'
db.create_tables([User])
rows=[{"name":"Rajesh", "age":21}, {"name":"Amar", "age":20}]
q=User.insert_many(rows)
q.execute()
a=User(name="Kiran", age=19)
b=User(name='Lata', age=20)
User.bulk_create([a,b])
db.close()