sqlalchemy: индивидуальная связь с декларативным

Каков наилучший способ создания отношения «один к одному» в SQLAlchemy с использованием декларативного?

У меня есть две таблицы, foo и bar , и я хочу, чтобы foo.bar_id на bar . Уловка заключается в том, что это взаимно однозначное отношение. bar не должен знать ничего о foo . Для каждого foo будет один и только один bar .

  • python - Проблема сохранения символа Unicode для MySQL с Django
  • Как подождать, пока страница загрузится Selenium для Python?
  • Сохранение записей словаря Python в том порядке, в котором они нажаты
  • Удаление строки из файла в Python
  • Номер столбца Excel для текста
  • любая идея, как обновить Python PIP на окне окна?
  • В идеале, после выбора foo, я мог бы сделать что-то вроде этого:

     myfoo.bar.whatever = 5 

    Каков наилучший способ сделать это с помощью декларативного?

  • Сериализация объектов внешнего ключа в Django
  • Как я могу использовать функцию sum () для списка в Python?
  • Диапазон в виде словарного ключа в Python
  • PicklingError: не может pickle <class 'decimal.Decimal'>: это не тот же объект, что и decimal.Decimal
  • Пользователь, не имеющий электронной почты, не может оставлять комментарии, используя структуру комментариев Django
  • расчет времени python (миллисекунды)
  • 4 Solutions collect form web for “sqlalchemy: индивидуальная связь с декларативным”

    Если вам нужна истинная взаимно-однозначная связь, вы также должны использовать «uselist = False» в определении ваших отношений.

     bar_id = Column(Integer, ForeignKey(Bar.id)) bar = relationship(Bar, uselist=False) 

    Документация для 0.7 объясняет это красиво :

     class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) child = relationship("Child", uselist=False, backref="parent") class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parent.id')) 

    ИЛИ

     class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) child_id = Column(Integer, ForeignKey('child.id')) child = relationship("Child", backref=backref("parent", uselist=False)) class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) 

    Оказывается, это на самом деле довольно легко. В вашей модели Foo:

     bar_id = Column(Integer, ForeignKey(Bar.id)) bar = relationship(Bar) 

    Я думаю, что если это действительно одно к одному, мы должны добавить ограничение уникальности для внешнего ключа, чтобы другой родитель не мог иметь другого родительского ребенка !! Как это:

     class Parent(Base): __tablename__ = 'parent' id = Column(Integer, primary_key=True) child_id = Column(Integer, ForeignKey('child.id'), unique=True) child = relationship("Child", backref=backref("parent", uselist=False)) class Child(Base): __tablename__ = 'child' id = Column(Integer, primary_key=True) 
    Python - лучший язык программирования в мире.