使用SQLAlchemy session.scalar查询映射对象未返回Cat模型对象
问题原因与解决办法
这是预期行为,原因很直接:你用cat_table.select()构造的是SQLAlchemy Core层面的查询,它直接操作数据库表结构,返回的是表中的原始字段值(比如这里的id字段),不会自动映射到你定义的Cat模型对象。
要获取Cat模型对象,需要切换到ORM层面的查询方式,两种常见做法如下:
方法一:直接查询模型类
把查询语句改成ORM的select并指定Cat模型即可,因为你已经通过mapper_registry.map_imperatively完成了模型与表的映射,ORM会自动转换结果:
from sqlalchemy import select # 替换原查询代码 result = await session.scalar(select(Cat)) print(type(result)) # <class '__main__.Cat'>
方法二:Core查询关联ORM(不推荐)
如果非要基于cat_table构造查询,可以通过select_from绑定模型,但这种方式冗余,不如方法一简洁:
result = await session.scalar(select(Cat).select_from(cat_table))
你提到Query方式能正常获取对象,也是因为Query是ORM专属API,天然和模型映射绑定;而session.scalar接收Core查询时,只会返回数据库返回的原始标量值。
内容的提问来源于stack exchange,提问作者LEv145
相关产品推荐
相关产品推荐

