Peewee - 插入新記錄



在 Peewee 中,有多種命令可以向表中新增新記錄。我們已經使用了 Model 例項的 save() 方法。

rec1=User(name="Rajesh", age=21)
rec1.save()

Peewee.Model 類還有一個 create() 方法,它建立一個新例項並將資料新增到表中。

User.create(name="Kiran", age=19)

此外,Model 還具有 insert() 作為類方法,它構造 SQL insert 查詢物件。查詢物件的 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 中驗證結果。

SQLite Stuidio 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()
廣告