Python 如何删除SqlAlchemy中多对多集合中的所有项?

Python 如何删除SqlAlchemy中多对多集合中的所有项?,python,many-to-many,sqlalchemy,Python,Many To Many,Sqlalchemy,当我需要从声明性ORM多对多关系中删除对象时,我应该这样做: blogpost.tags.remove(tag) 嗯。如果我需要清除所有这些关系(不仅仅是一种关系),我该怎么办?典型情况:我想为我的博客帖子设置一个新的标签列表。所以我需要…: 删除该blogpost和标记之间的所有现有关系 设置新关系并创建新标记(如果不存在) 当然,还有更好的方法。在这种情况下,请告诉我。这是清除列表的标准Python习惯用法–分配给“整个列表”切片: blogpost.tags[:] = [] 您可能希望

当我需要从声明性ORM多对多关系中删除对象时,我应该这样做:

blogpost.tags.remove(tag)
嗯。如果我需要清除所有这些关系(不仅仅是一种关系),我该怎么办?典型情况:我想为我的博客帖子设置一个新的标签列表。所以我需要…:

  • 删除该blogpost和标记之间的所有现有关系
  • 设置新关系并创建新标记(如果不存在)

  • 当然,还有更好的方法。在这种情况下,请告诉我。

    这是清除列表的标准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