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)
我的问题是,当我从“角色”的“库存”中移除一个“库存”对象时,这个变化不会立即更新,直到会话被提交。例如:
>>> 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>
我看到有一个关系选项叫“级联”,但是我找不到在这种情况下让它工作的办法。
1 个回答
1
Session.delete()
方法只是把一个实例标记为“待删除”,所以在你把更改保存到数据库之前,你的关系不会改变,这和级联规则无关。另一方面,你可以直接从 character.inventory
集合中移除 Inventory
实例,这样如果你设置了 'delete-orphan'
级联规则,移除的 Inventory
实例就会被标记为删除。