我正在使用优秀的PeeWee
模块将一些ID和主机名保存到MySQL
表中。
我想要' clientId' (它是一个IntegerField)作为主键,但我似乎需要使用save(force_insert=True)
使其插入 - 否则我没有任何东西添加到表中。我没有收到任何错误消息。
我认为只有在primary_key字段不是Integer时才需要这个。
我指的是文档 - (https://peewee.readthedocs.org/en/2.0.2/peewee/fields.html#non-integer-primary-keys)
我的模特: -
class BaseModel(peewee.Model):
class Meta:
database = db
class Client(BaseModel):
clientId = peewee.IntegerField(primary_key=True)
clientName = peewee.TextField()
isDeletedClient = peewee.BooleanField(default=False)
#Create object to insert using collected data...
clientEntry = Client(clientId=clientId,
clientName=clientName,
isDeletedClient=isDeletedClient)
#clientEntry.save() # <-- Nothing gets inserted
clientEntry.save(force_insert=True) # <-- Works.
答案 0 :(得分:0)
这是一个微妙的观点,但如果您想要自动递增主键字段,则应使用PrimaryKeyField
而不是IntegerField(primary_key=True)
。
这应解决问题:
class Client(BaseModel):
clientId = peewee.PrimaryKeyField()
clientName = peewee.TextField()
isDeletedClient = peewee.BooleanField(default=False)
答案 1 :(得分:-1)
非常感谢你的回复。我认为我错误地使用了save()方法。而不是save(),如果记录已经存在主键,它可以进行更新,我应该使用create(),因为我的脚本总是创建一个新的空表然后填充它。
所以现在我的模型保持不变,但插入一行变成......
clientEntry = Client.create(clientId=clientId,
clientName=clientName,
isDeletedClient=isDeletedClient)