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

如何使用Peewee获取插入数据后的自增主键ID值?

解决Peewee插入数据后获取自增主键ID的问题

我之前也碰到过一模一样的情况,Peewee的主键类型没选对的话,确实拿不到数据库生成的自增ID。咱们一步步来搞定:

首先看你的Model定义,核心问题出在id字段的类型上——你用了IntegerField(primary_key=True),但Peewee里专门为自增主键设计的是AutoField,普通的IntegerField不会自动触发逻辑去获取数据库生成的自增值。

第一步:修改Model的主键字段

把原来的id字段替换成AutoField,修改后的Model代码如下:

class UserModel(pw_db.Model):
    id = AutoField(primary_key=True)  # 替换为AutoField
    username = CharField()
    phone = CharField()
    status = IntegerField()
    
    class Meta:
        db_table = 't_test'

第二步:调整插入函数获取ID

Peewee的create()方法会直接返回创建好的Model实例,你只需要访问实例的id属性,就能拿到数据库生成的自增ID了。修改后的插入函数可以这样写:

def create_user(body=None):
    user_instance = models.UserModel.create(
        username=body['userName'],
        phone=body.get('phone', None),
        status=body.get('status', 1)
    )
    return user_instance.id  # 直接返回自增ID

如果之后还需要用到这个用户的其他字段,也可以直接返回user_instance,调用方可以按需获取属性,比如user_instance.username、user_instance.status等。

补充说明

为什么SQLAlchemy能直接拿到?因为SQLAlchemy对自增主键字段会自动触发数据库的返回自增值逻辑,而Peewee需要你明确使用AutoField来开启这个功能。如果硬要坚持用IntegerField,你得手动执行数据库特定的查询(比如MySQL的SELECT 418254),但这种方式既不优雅也容易出问题,所以还是推荐用官方设计的AutoField方案最稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:18:41