,當我需要從聲明ORM許多一對多的關係中刪除一個對象,我應該這樣做:如何從SqlAlchemy中的多對多集合中刪除所有項目?
blogpost.tags.remove(tag)
嘛。如果我需要清除所有這些關係(不只是一個),我該怎麼辦?典型的情況:我想爲我的博客帖子設置一個新的標籤列表。所以,我需要...:
- 刪除所有現有的關係是博客帖子和標籤之間。
- 設置新關係並創建新標記(如果它們不存在)。
當然,可能有更好的方法來做到這一點。在這種情況下,請讓我知道。
,當我需要從聲明ORM許多一對多的關係中刪除一個對象,我應該這樣做:如何從SqlAlchemy中的多對多集合中刪除所有項目?
blogpost.tags.remove(tag)
嘛。如果我需要清除所有這些關係(不只是一個),我該怎麼辦?典型的情況:我想爲我的博客帖子設置一個新的標籤列表。所以,我需要...:
當然,可能有更好的方法來做到這一點。在這種情況下,請讓我知道。
這是爲了清除列表中的標準Python成語 - 分配給「整個列表」切片:
blogpost.tags[:] = []
取而代之的是空單的,你可能想直接分配一套新的標籤。
blogpost.tags[:] = new_tags
的SQLAlchemy的關係instrumented attributes,這意味着它們保持一個列表(或一組,字典等)的接口,但是任何的變化都反映到數據庫中。這意味着任何你可以用列表做的事情都可以通過關係來實現,而SQLA透明地監聽這些更改並相應地更新數據庫。
對Two-Bit Alchemist報告的內容充滿信心。
blogpost.tags[:] = new_tags
會抱怨
TypeError: 'AppenderBaseQuery' object does not support item assignment
但
blogpost.tags = new_tags
似乎很好地工作。
或者換句話說:SQLAlchemy很棒。 – ereOn
爲什麼不只是'blogpost.tags = new_tags'? (沒有[:]) – Devi
當我現在嘗試這個(2014年12月,SQLAlchemy 0.9)我得到「TypeError:'AppenderBaseQuery'對象不支持項目分配。」 –