PeeWee Integer主键需要force_insert=Tru

2024-09-30 00:40:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用优秀的PeeWee模块将一些id和主机名保存到MySQL表中。 我希望'clientId'(它是一个整数字段)作为主键,但是我似乎需要使用save(force_insert=True)使其插入-否则我不会向表中添加任何内容。我没有收到任何错误消息。 我以为只有在主键字段不是整数的情况下才需要这样做。 我指的是文档-(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.

Tags: clienttruesaveclassbasemodelinsertpeeweeclientid
2条回答

非常感谢你的回复。我相信我没有正确地使用save()方法。我应该使用create(),因为我的脚本总是创建一个新的空表,然后填充它。在

所以现在我的模型保持不变,但是插入一行会变成。。。在

clientEntry = Client.create(clientId=clientId, 
                            clientName=clientName,
                            isDeletedClient=isDeletedClient)

这是一个微妙的问题,但如果您希望自动递增主键字段,则应该使用PrimaryKeyField,而不是IntegerField(primary_key=True)。在

这样可以解决问题:

class Client(BaseModel):
    clientId = peewee.PrimaryKeyField()
    clientName = peewee.TextField()
    isDeletedClient = peewee.BooleanField(default=False)

相关问题 更多 >

    热门问题