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

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

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

В идеале, после выбора foo, я мог бы сделать что-то вроде этого:

 myfoo.bar.whatever = 5 

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

  • Мне нужен образец модуля тестирования python sqlalchemy с носом
  • динамическое сопоставление sqlalchemy
  • SQLAlchemy: гибридное выражение с отношением
  • Могут ли события SQLAlchemy использоваться для обновления денормализованного кэша данных?
  • Как присоединиться к трем таблицам с SQLalchemy и сохранить все столбцы в одной из таблиц?
  • Flask-SQLAlchemy - Когда создаются и уничтожаются таблицы / базы данных?
  • изменение в обработке импорта / модулей от python2 до python3?
  • SQLAlchemy - сопоставление самореферентных отношений как одного для многих (декларативная форма)
  • 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) 
    Interesting Posts

    Почему Python имеет функцию формата, а также метод форматирования

    Каков хороший способ избежать использования iterrows в этом примере?

    pygame падает при использовании метода заливки (цвета)

    Как установить разрешения (атрибуты) в файле в ZIP-файле с помощью zipfile-модуля Python?

    Вставка нескольких объектов словаря в базу данных MySQL с использованием python и MySQLdb

    Как делать «и» и «или» работать, когда они объединены в одном заявлении?

    Лучший способ присоединиться к двум крупным наборам данных в Pandas

    ImportError не может импортировать имя BytesIO при импорте caffe на ubuntu

    Python try-else

    Индикатор выполнения при загрузке файла через http с запросами

    Использование GCS в GAE Локальный devserver

    Используйте pdb.set_trace () в скрипте, который читает stdin через канал

    Что касается функции os.fork () в Python

    Настройка внешнего ключа для абстрактного базового класса с помощью Django

    Плагин Nose для указания порядка выполнения единичного теста

    Python - лучший язык программирования в мире.