我在從PostTag
表中刪除包含Post
和Tag
列的記錄時遇到問題。這是我的關係表:如何從SQLAlchemy中的多對多(二級)表中刪除記錄?
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()
行從多到許多關係被刪除,但也有來自的記錄表。
我只是需要從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 FROM
標籤WHERE
標籤.
編號= 14
不應該存在。
UPDATE /也許解決
我有種解決了這個有:
sql = 'DELETE FROM PostTag WHERE Post=%s'
db.engine.execute(sql, post,())
但是,這不只是ORM方式。同樣適用於插入。我會嘗試得到這個解決ORM的方式。如果我讓這個問題消失,我會回答問題。
你能解釋爲什麼這不起作用嗎? 'tags = post.tags tags = []' – Konrad
它將它更新爲提交,但是如果你看看db上發生了什麼。這實際上是在我的情況下發送4000個刪除。雖然它可以發送一個。 – Drachenfels