首页 > 解决方案 > SQLAlchemy 删除限制行

问题描述

如何从查询中删除最后 10 行?

我有疑问:

query = session.query(MyTableClass) \ 
.filter(MyTableClass.country=='USA') \ 
.order_by(MyTableClass.id.asc()) \ 
.limit(10)

如何只删除 10 行?

我试过: query.delete()- 错误:调用limit() 时无法调用Query.update() 或Query.delete()

session.delete(query)- 错误:类 'sqlalchemy.orm.query.Query' 未映射

标签: pythonsqlalchemy

解决方案


您不能删除带有 limit() 的查询,但可以删除带有 filter() 的查询。那么你:

  • 将您的查询变成一个带有 limit(10) 的子查询。只需在最后放一个 .subquery()
  • 进行第二个查询来过滤您的子查询,您可以将其删除。

如果这对您来说很愚蠢,那么您并不孤单。我相信这在几年前被报告为一个错误并且从未得到修复。它与对象类型 limit() 返回有关。


推荐阅读