在SQLAlchemy中,这两个模型有什么区别?

时间:2011-11-27 04:38:21

标签: mysql sql database orm sqlalchemy

#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

“关系”的正确位置是什么?它甚至是必需的吗?如果我把它留下来怎么办?

1 个答案:

答案 0 :(得分:0)

两者在语义上都是相同的 SA使用ForeignKey来推断many关系的one-to-many方。
阅读解释bidirectional关系的Linking Relationships with Backref部分。相关提取物:

  

...实际上,backref关键字只是放置a的常用快捷方式   第二个关系到地址映射,包括   在镜子上建立双方的事件监听器   两个方向的属性操作。 ...