2011-11-27 41 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

兩者在語義上是相同的。
SA使用ForeignKey s來推斷一方的關係one-to-many
閱讀Linking Relationships with Backref解釋bidirectional關係的部分。相關提取物:

...事實上,backref參數僅用於放置 第二關係到地址映射,包括 建立一個事件監聽器的兩側,這將反映 屬性的公共快捷雙向操作。 ...

+0

謝謝,麪包車。當你說兩者在語義上相同時......你說這兩個都可以工作,並且取決於我的偏好? – TIMEX

+0

這完全正確 – van