You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义IntegerField主键无法保存数据求助(Peewee 3.9.2)

解决Peewee自定义主键无法保存数据的问题

我之前也碰到过一模一样的情况,手动指定自定义主键值后调用save()就会触发这个语法错误,其实问题出在Peeweesave()方法的默认逻辑上。

先还原你的代码场景:

from peewee import *
db = SqliteDatabase(r'peewee.db')
class BaseModel(Model):
    class Meta:
        database=db
class Case(BaseModel):
    cid=IntegerField(primary_key=True)
db.create_tables([Case,])
c1=Case(cid=1)
c1.save()

触发的核心报错是:

peewee.OperationalError: near "WHERE": syntax error

问题原因

Peewee的save()方法会自动判断执行插入还是更新操作:当实例的主键有值时,它默认认为这条记录已经存在,会尝试生成UPDATE语句更新数据。但你的Case模型只有主键字段,没有其他需要更新的字段,最终生成的SQL会变成这种错误格式:

UPDATE "case" SET WHERE "cid" = ?

SET后没有任何字段,直接跟WHERE就导致了语法错误。

两种可行的解决方法

方法一:用create()直接插入新记录

create()方法会直接生成INSERT语句,跳过更新判断逻辑,非常适合创建新记录:

# 替换原有的实例创建+save()步骤
Case.create(cid=1)

方法二:调用save()时强制指定插入操作

如果一定要用save()方法,可以通过参数强制让它执行插入,跳过更新检查:

c1=Case(cid=1)
c1.save(force_insert=True)

这两种方式都能正常插入带自定义主键值的记录。

内容的提问来源于stack exchange,提问作者pcell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:19:07