如何使用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
相关产品推荐
相关产品推荐

