sqlalchemy级联和关联对象

时间:2010-01-04 11:24:45

标签: python 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”中删除“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>

我已经看到有一个关系选项“cascade”但我找不到让它在这种情况下工作的方法。

1 个答案:

答案 0 :(得分:1)

Session.delete()方法只是将一个实例标记为“要删除”,因此您的关系不会更改,直到您在级联规则上刷新对数据库的更改。另一方面,您可以从Inventory集合中删除character.inventory实例,然后使用'delete-orphan'级联规则将已删除的Inventory实例标记为删除。