2010-01-04 110 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