Python 如何删除SqlAlchemy中多对多集合中的所有项?
当我需要从声明性ORM多对多关系中删除对象时,我应该这样做:Python 如何删除SqlAlchemy中多对多集合中的所有项?,python,many-to-many,sqlalchemy,Python,Many To Many,Sqlalchemy,当我需要从声明性ORM多对多关系中删除对象时,我应该这样做: blogpost.tags.remove(tag) 嗯。如果我需要清除所有这些关系(不仅仅是一种关系),我该怎么办?典型情况:我想为我的博客帖子设置一个新的标签列表。所以我需要…: 删除该blogpost和标记之间的所有现有关系 设置新关系并创建新标记(如果不存在) 当然,还有更好的方法。在这种情况下,请告诉我。这是清除列表的标准Python习惯用法–分配给“整个列表”切片: blogpost.tags[:] = [] 您可能希望
blogpost.tags.remove(tag)
嗯。如果我需要清除所有这些关系(不仅仅是一种关系),我该怎么办?典型情况:我想为我的博客帖子设置一个新的标签列表。所以我需要…:
当然,还有更好的方法。在这种情况下,请告诉我。这是清除列表的标准Python习惯用法–分配给“整个列表”切片:
blogpost.tags[:] = []
您可能希望直接分配新的标记集,而不是空列表
blogpost.tags[:] = new_tags
SQLAlchemy的关系是,这意味着它们保留列表(或集合、dict等)的接口,但任何更改都会反映在数据库中。这意味着,您可以通过关系对列表执行任何操作,而SQLA透明地侦听更改并相应地更新数据库。确认了报告的内容
blogpost.tags[:] = new_tags
会抱怨
TypeError: 'AppenderBaseQuery' object does not support item assignment
但是
似乎效果不错。或者换个说法:SQLAlchemy很棒。为什么不干脆
blogpost.tags=new_tags
?(没有[:])当我现在尝试这个(2014年12月,SQLAlchemy 0.9)时,我得到了“TypeError:“AppenderSequery”对象不支持项分配。”这不会将任何内容保留到数据库中,这意味着设置为空列表不会清除记录
blogpost.tags = new_tags