Я не могу найти подходящей документации о том, как указать отношения
с использованием декларативного синтаксиса SQLAlchemy .. Он не поддерживается? То есть следует ли использовать «традиционный» синтаксис?
Я ищу способ указать отношения на более высоком уровне, избегая необходимости возиться с внешними ключами и т. д. Я хотел бы просто объявить «address = OneToMany (Address)» и позволить структуре обрабатывать детали .. Я знаю что Elixir может это сделать, но мне было интересно, может ли "простой" SQLA сделать это тоже.
Спасибо за вашу помощь!
Что ж, я ищу способ указать отношения на более высоком уровне, чтобы избежать путаницы с внешними ключами и т. д. Я хотел бы просто объявить «address = OneToMany (Address)» и позволить структуре обрабатывать детали .. Я знаю, что Elixir может это сделать, но мне было интересно, может ли «простой» SQLA сделать это тоже.
@Joril: не могли бы вы дополнить вопрос своими комментариями?






Предполагая, что вы имеете в виду декларативный плагин, где все, что я собираюсь сказать, задокументировано с примерами:
class User(Base):
__tablename__ = 'users'
id = Column('id', Integer, primary_key=True)
addresses = relation("Address", backref = "user")
class Address(Base):
__tablename__ = 'addresses'
id = Column('id', Integer, primary_key=True)
user_id = Column('user_id', Integer, ForeignKey('users.id'))
Таким образом, невозможно избежать ручного создания внешних ключей, таблиц соединений и т.п. .. :( (кроме использования Elixir, конечно) Спасибо!
Нет, функция отношения может делать все, что вы можете делать с SQLA. Наверное, сильнее эликсира.
Посмотрите раздел «Настройка отношений» в Декларативные документы. Не такой высокий уровень, как «OneToMany», но лучше, чем полное определение отношения.
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
email = Column(String(50))
user_id = Column(Integer, ForeignKey('users.id'))
Спасибо за обновленную ссылку :) Но ... извините, я не вижу разницы с тем, что сказал Ali A .. ^^; Учитывая этот класс Address, вам все равно нужно указать «адрес = отношение (...)» внутри пользователя. Я что-то упустил? ^^;
Ах, кажется, я неправильно понял ваш вопрос! Да, чтобы получить и то и другое, я думаю, вам действительно нужно выполнить такое количество уточнений. Спросите в списке SA (где отвечает Майк Байер, улаживая все споры!), Если вам нужен более авторитетный ответ!
Что вы имеете в виду, говоря «То есть должен ли я использовать« традиционный »синтаксис?» Пожалуйста, дополните.