2010-01-04 6 views
0

내 데이터베이스 구조는이 같은 (I 선언적 스타일을 사용하고 있습니다)입니다 오브젝트 :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

답변

1

Session.delete() 메서드는 인스턴스를 "삭제할 대상"으로 표시하기 만하므로 계단식 규칙에 독립적 인 데이터베이스 변경 내용을 플러시 할 때까지 관계가 변경되지 않습니다. 반면에 인스턴스를 character.inventory 컬렉션에서 제거한 다음 'delete-orphan' 캐스케이드 규칙을 삭제할 경우 Inventory 인스턴스가 삭제됨으로 표시됩니다.

+0

대단히 고맙습니다. 이것은 제가 잘못 이해 한 계단식 옵션의 역할을 분명히합니다. :) – pygabriel