2011-11-27 3 views
0
#models1.py 
class User(Base): 
    __tablename__ = 'user' 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 

    addresses = relationship("Address", backref="user") 

class Address(Base): 
    __tablename__ = 'address' 
    id = Column(Integer, primary_key=True) 
    email = Column(String) 
    user_id = Column(Integer, ForeignKey('user.id')) 


#models2.py 
class User(Base): 
    __tablename__ = 'user' 
    id = Column(Integer, primary_key=True) 
    name = Column(String)   

class Address(Base): 
    __tablename__ = 'address' 
    id = Column(Integer, primary_key=True) 
    email = Column(String) 
    user_id = Column(Integer, ForeignKey('user.id')) 
    addresses = relationship("Address", backref="user") 

알다시피, 유일한 차이점은 "관계"가 다른 위치에 배치된다는 것입니다. 나는 SQLAlchemy 문서에서 두 개의 다른 장소에 배치하기 때문에 혼동 스럽다. 먼저 here이면 here입니다.SQLAlchemy에서이 두 모델의 차이점은 무엇입니까?

"관계"의 올바른 위치는 어느 것입니까? 그리고 그것은 심지어 필요한가? 내가 그걸 버린다면 ...?

+0

관계가 일대일 관계를 정의하면 둘 다 동일합니다. 둘 다 끝나면 두 클래스가 서로 참조됩니다. – zmbq

답변

0

둘 다 의미 상 동일합니다.
SAForeignKey을 사용하여 many 쪽이 one-to-many 인 관계를 추론합니다.
bidirectional 관계를 설명하는 Linking Relationships with Backref 섹션을 읽으십시오. 관련 추출물 :

... 사실, 역 참조 키워드는 속성을 반영한다 양쪽에 이벤트 리스너의 설립, 주소 맵핑 위에 두 번째 관계를 배치 포함한 단지 일반적인 바로 가기입니다 양방향으로 작동합니다. ...

+0

감사합니다, 밴. 둘 다 의미 론적으로 동일하다고 말할 때 ... 둘 다 일할 것이라고 말하면 내 선호도에 달렸습니까? – TIMEX

+0

정확하게 맞습니다. – van

관련 문제