PeeWee Integer主键需要force_insert = True

时间:2015-10-15 08:24:27

标签: python mysql peewee

我正在使用优秀的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.

2 个答案:

答案 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)