我的数据库结构是这样的(我使用声明式样式):
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”但我找不到让它在这种情况下工作的方法。
答案 0 :(得分:1)
Session.delete()
方法只是将一个实例标记为“要删除”,因此您的关系不会更改,直到您在级联规则上刷新对数据库的更改。另一方面,您可以从Inventory
集合中删除character.inventory
实例,然后使用'delete-orphan'
级联规则将已删除的Inventory
实例标记为删除。