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

如何用SQLAlchemy的db.session.execute批量删除关联表多行?

Flask-SQLAlchemy新语法实现批量删除关联表数据

你需要用SQLAlchemy的Delete语句构造器来实现批量删除,而不是在select()对象上调用delete()——这就是你报错的原因,Select对象本身没有delete方法。

正确的写法有两种,都能实现和旧语法一样的批量删除效果(直接在数据库层面执行,无需循环单条删除):

方法一:使用原生SQLAlchemy的delete构造器

from sqlalchemy import delete

# 构造删除语句,添加过滤条件
delete_stmt = delete(ItemCategories).where(
    ItemCategories.category_id == 5,
    ItemCategories.name == "Shelved"
)

# 执行删除并提交事务
db.session.execute(delete_stmt)
db.session.commit()

方法二:使用Flask-SQLAlchemy封装的delete方法

如果你习惯旧语法里的filter_by和filter写法,也可以用Flask-SQLAlchemy的db.delete()来构造语句:

delete_stmt = db.delete(ItemCategories).filter_by(category_id=5).filter(ItemCategories.name == "Shelved")

db.session.execute(delete_stmt)
db.session.commit()

这两种方式本质都是生成对应的DELETE SQL语句,一次性删除符合条件的所有行,和你之前用query(...).delete()的效率完全一致,不需要逐条处理模型对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:20:23