Hon*_*rek 11 python many-to-many sqlalchemy
当我需要从声明性ORM多对多关系中删除一个对象时,我应该这样做:
blogpost.tags.remove(tag)
Run Code Online (Sandbox Code Playgroud)
好.如果我需要清除所有这些关系(不仅仅是一个),我该怎么办?典型情况:我想为我的博客帖子设置一个新的标签列表.所以我需要...:
当然,可以有更好的方法来做到这一点.在那种情况下,请告诉我.
Pet*_*rin 21
这是用于清除列表的标准Python习惯用法 - 分配给"整个列表"切片:
blogpost.tags[:] = []
Run Code Online (Sandbox Code Playgroud)
您可能希望直接分配新的标记集,而不是空列表.
blogpost.tags[:] = new_tags
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy的关系是检测属性,意味着它们保持列表(或集合,字典等)的接口,但任何更改都反映在数据库中.这意味着您可以使用关系对列表执行任何操作,而SQLA会透明地侦听更改并相应地更新数据库.
对于两位炼金术士的报道感到震惊.
blogpost.tags[:] = new_tags
Run Code Online (Sandbox Code Playgroud)
会抱怨
TypeError: 'AppenderBaseQuery' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
但
blogpost.tags = new_tags
Run Code Online (Sandbox Code Playgroud)
似乎工作正常.
归档时间: |
|
查看次数: |
6100 次 |
最近记录: |