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

SQLAlchemy 2.0语法删除记录提示Row类未映射如何解决?

报错原因

SQLAlchemy 2.0 语法中,session.execute() 返回的结果是sqlalchemy.engine.row.Row对象的迭代器,并非直接返回ORM映射实例。你查询整个Player实体时,每个Row对象会将查询到的Player实例存储在第一个元素位置,直接将Row对象传入仅接受已映射ORM实例的session.delete()方法,就会触发未映射实例错误。

解决方法

以下是三种常用解决方案:

  • 方案1:从Row对象中取出ORM实例再执行删除
del_records = session.execute(sa.select(Player).where(Player.id_ <= 10))
for d in del_records:
    session.delete(d[0])
session.commit()
  • 方案2:使用scalars()方法直接获取ORM实例迭代器
del_records = session.execute(sa.select(Player).where(Player.id_ <= 10)).scalars()
for d in del_records:
    session.delete(d)
session.commit()
  • 方案3:使用批量删除语法(适合大批量删除场景,性能更优,无需将数据加载到内存)
session.execute(sa.delete(Player).where(Player.id_ <= 10))
session.commit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:45:03