我有兩個外鍵的SQLAlchemy的實體,因爲它可以有兩種完全不同的父母中的一方。讓我們用地址,客戶和供應商用於說明目的。一個地址可以屬於客戶或供應商(並可以在我的情況下有孩子)。級聯刪除孤兒與通用協會(多父母)在SQLAlchemy的
我想要一個地址及其子女自動刪除,只要它具有零周的父母,也就是既不是客戶也不是供應商是指它。
我初步實現了這個爲
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
customer_id = Column(Integer, ForeignKey('customers.id')
supplier_id = Column(Integer, ForeignKey('suppliers.id')
# etc ...
據SQLAlchemy的文檔,實現Generic Associations的正規途徑是通過使用表每相關或的table-per-協會。這兩個似乎沒有解決,雖然級聯刪除的問題:
- 表每相關:由於地址有自己的孩子,我會複製下面按有關地址的整個層次。否則,問題只是移動到地址孩子
- 的table-per-關聯關係:與地址安裝反向引用這似乎是同我的初步實施,除了現在眼前的父母都在該協會的行表。我看不出
delete-orphan
會在這裏工作。
在sqlalchemy中處理具有通用關聯的delete-orphan
級聯的正確方法是什麼?