如何用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
相关产品推荐
相关产品推荐

