В SQLAlchemy, в чем разница между этими двумя моделями? - PullRequest
0 голосов
/ 27 ноября 2011
#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 он размещается в двух разных местах. Сначала здесь , затем здесь .

Какова правильная позиция "отношения"? И требуется ли это вообще? Что если я оставлю это без внимания ...?

1 Ответ

0 голосов
/ 28 ноября 2011

Оба семантически идентичны.
SA использует ForeignKey s для вывода стороны many отношения one-to-many.
Чтение Связывание отношений с Backref разделом, в котором объясняетсяbidirectional отношения.Соответствующее извлечение:

... Фактически, ключевое слово backref является всего лишь общим ярлыком для размещения второго отношения в сопоставлении адреса, включая создание слушателя событий с обеих сторон, который будет зеркально отражать атрибутоперации в обоих направлениях....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...