我有兩個表,image
和restaurant
。我已經建立了他們之間的多對多關係。刪除具有多對多關係的行
下面是表定義的相關部分:
images_assoc = Table('restaurant_image_assoc', Base.metadata,
Column('restaurant', Integer(unsigned=True),
ForeignKey('restaurant.id')),
Column('image', Integer(unsigned=True),
ForeignKey('image.id')))
class Image(Base):
__tablename__ = 'image'
id = Column(Integer(unsigned=True), primary_key=True)
reports = Column(TinyInt, nullable=False, default=0)
created_at = Column(DateTime, default=datetime.now)
class Restaurant(Base):
__tablename__ = 'restaurant'
id = Column(Integer(unsigned=True), primary_key=True)
images = relationship(Image, secondary=images_assoc)
我需要image
刪除行,但我當然需要刪除restaurant_image_assoc
,首先指向它的所有行。我該怎麼做呢?
我嘗試這樣做:
request.db.query(images_assoc)\
.filter(images_assoc.c.image==image.id).delete()
request.db.delete(image)
request.db.commit()
哪裏image
是我要刪除的行,但我得到這個錯誤:
AttributeError: 'Table' object has no attribute 'class_'
你有沒有嘗試設置圖像和image_assoc之間的關係刪除孤兒級聯? [see here](http://docs.sqlalchemy.org/en/rel_0_7/orm/session.html#unitofwork-cascades) – urschrei
沒有任何關係,當我嘗試做出一個時,它開始向我大喊。我目前使用原始SQL攻擊了一起工作的東西。 >。< –
這裏的具體錯誤信息是Query()不適用於像現在這樣的表(query(images_assoc)... delete())。與其他答案一樣,只是操作Restaurant.images將自動處理images_assoc中的行 - 因爲它是「次要的」,所以無論級聯設置如何。也就是說,如果你說restaurant.images.remove(some_image),然後刷新,這就是你需要刪除images_assoc中的行。 – zzzeek