我在从包含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 FROM
标记WHERE
标记.
Id= 14
不应存在。
更新/可能的解决方案
我解决这个问题的方法是:
sql = 'DELETE FROM PostTag WHERE Post=%s'
db.engine.execute(sql, post, ())
但这不仅仅是ORM的方式。插入也一样。我会设法解决这个问题的。如果我把这个问题解决了,我会贴出答案的。
尝试从集合中移除对象:
您还可以删除单个项目:
试试这个:
在这里,我们将集合
post.tags
重新定义为空数组并提交更改。为了解释这一点,我将参考SQLAlchemy docs:因此,SQLAlchemy会跟踪我们对集合post.tags所做的更改,并在提交时对其进行更新。
如果我们只有一个标记(比如
sometag
),我们可以使用remove
方法,如下所示:相关问题 更多 >
编程相关推荐