【发布时间】:2026-01-22 13:55:02
【问题描述】:
我在从包含Post 和Tag 列的PostTag 表中删除记录时遇到问题。这是我的关系表:
tags = db.Table('PostTag',
db.Column('Tag', db.Integer, db.ForeignKey('Tag.Id')),
db.Column('Post', db.Integer, db.ForeignKey('Post.Id'))
)
和
tags = db.relationship(Tag, secondary=tags, backref=db.backref('Post', lazy='dynamic'))
当我这样做时:
from models.Post import Post
posts = Post.query.join(Post.tags).filter(Post.Id == id).all()
if(posts):
return posts
return False
然后
for posttag in post[0].tags:
db.session.delete(posttag)
db.session.flush()
多对多关系中的行被删除,Tag 表中的记录也被删除。
我只需要从PostTag 表中删除某些条件下的记录(例如Post=1)
我搜索了互联网,但没有找到任何结论。我不需要多对多关系的级联。
这是sql日志:
297 Query DELETE FROM `PostTag` WHERE `PostTag`.`Tag` = 14 AND `PostTag`.`Post` = 3
297 Query DELETE FROM `PostTag` WHERE `PostTag`.`Tag` = 14 AND `PostTag`.`Post` = 18
297 Query DELETE FROM `Tag` WHERE `Tag`.`Id` = 14
最后一行 297 Query DELETE FROMTagWHERETag.Id= 14 不应该在那里。
更新/也许是解决方案
我通过以下方式解决了这个问题:
sql = 'DELETE FROM PostTag WHERE Post=%s'
db.engine.execute(sql, post, ())
但这不仅仅是 ORM 方式。插入也是如此。我将尝试以这种解决 ORM 的方式。如果我让这个问题消失,我会发布答案。
【问题讨论】:
标签: python sqlalchemy