2010-01-04 108 views
0

我的數據庫結構是這樣的(我使用的聲明樣式):SQLAlchemy的級聯和關聯對象

class Character(Base): 
    __tablename__="characters" 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 
    player = Column(String) 
    inventory = relation(Inventory) 

class Item(Base): 
    __tablename__="items" 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 

class Inventory(Base): 
    __tablename__="inventory" 
    id = Column(Integer, primary_key=True) 
    char_id = Column(Integer, ForeignKey("characters.id")) 
    item_id = Column(Integer, ForeignKey("characters.id")) 
    quantity = Column(Integer) 
    item = relation(Item) 

我的問題是,當我從「Character.inventory」這個刪除「庫存」對象在會話提交之前不會更新。例如:

>>> torch_inv=character.inventory[0] # Inventory object referred to a torch 
>>> torch_inv.item, torch_inv.quantity 
(<Item object, torch>, 3) 
>>> session.delete(torch_inv) 
>>> character.inventory[0] 
<Inventory object, torch> 

我見過有一個關係的選擇「層疊」,但我不能找到一種方法,使其在這種情況下工作。

+0

('item_id'引用'characters.id'?) – bobince 2010-01-04 15:21:29

回答

1

Session.delete()方法只是將實例標記爲「要刪除」,因此,您的關係不會更改,直到您將更改刷新到獨立於級聯規則的數據庫。另一方面你可以從character.inventory集合中刪除Inventory實例,然後有'delete-orphan'級聯規則將標記刪除的Inventory實例刪除。

+0

非常感謝,這說明了我錯誤理解的級聯選項的作用:)。 – pygabriel 2010-01-04 20:52:48