【发布时间】:2021-04-19 15:59:35
【问题描述】:
我有两个具有 1-n 关系的表,我想使用 bulk_create() 在这些表中插入数据。
让我们使用User and Tweet example。
from peewee import *
db = SqliteDatabase('my_app.db')
class BaseModel(Model):
class Meta:
database = db
class User(BaseModel):
username = CharField(unique=True)
class Tweet(BaseModel):
user = ForeignKeyField(User, backref='tweets')
message = TextField()
我想创建User 和Tweet 的未保存实例并使用bulk_create() 加载它们。一个天真的解决方案是:
db.create_tables([User, Tweet])
john = User(username='John')
mehdi = User(username='Mehdi')
users = [john, mehdi]
tweets = [Tweet(user=john, message='Hello twitter world!'),
Tweet(user=mehdi, message='This is my first message.'),
Tweet(user=mehdi, message='This is my second message.')]
User.bulk_create(users)
Tweet.bulk_create(tweets)
很遗憾,这不起作用,因为 User 实例的主键未更新 (as stated in the documentation except for Postgres databases)。
由于似乎无法更新User 实例的主键(即使可以,从数据库中读取主键也可能非常低效),我能看到的唯一解决方案是使用我自己的主键并在创建实例时设置它。这意味着不使用 peewee 非常方便的自动递增主键系统,我也想知道在此之前是否有任何替代方法。
【问题讨论】: