SQLAlchemy插入后如何返回完整ORM实例而非仅主键
解决方案
方法1:修正查询结果的获取方式
你之前的问题出在使用scalar()方法,它只返回结果集的第一行第一列的值(也就是主键)。要获取完整ORM实例,改用scalars().one()来提取:
stmt = insert(Table).values(data).returning(Table) orm_instance = session.execute(stmt).scalars().one()
或者也可以通过one()获取结果行后提取实例:
stmt = insert(Table).values(data).returning(Table) result_row = session.execute(stmt).one() orm_instance = result_row[0]
returning(Table)已经告诉SQLAlchemy要返回整个实体的映射对象,只要用正确的方法提取结果就能拿到完整实例,不需要额外查询。
方法2:使用ORM原生的添加方式(更简洁)
如果是插入单个实例,直接用session.add()配合flush()也能拿到带自动生成UUID的完整实例,不需要写手动insert语句:
instance = Table(**data) session.add(instance) session.flush() # 触发数据库插入,此时UUID主键已生成 # instance现在包含所有字段的值,包括数据库生成的UUID
这种方式更贴合SQLAlchemy的ORM设计习惯,代码更简洁。
内容的提问来源于stack exchange,提问作者Archirk
相关产品推荐
相关产品推荐

