Как создать связь между двумя таблицами при присоединении к другой таблице в sqlalchemy?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как создать связь между двумя таблицами при присоединении к другой таблице в sqlalchemy?

Сообщение Anonymous »

Я пытаюсь создать связь sqlalchemy между двумя таблицами, основанную на значении другой таблицы. Моя таблица UserSports связана с таблицей бейсбола (а также другими видами спорта, в которые они, возможно, играли). У меня также есть таблица перечислений Sports, которая присоединяется к таблице Users. Цель состоит в том, чтобы создать связь между UserSports и Baseball с помощью перечислений Sports. user_sports.id и baseball.user_sport_id — это отношения один-к-одному. SQL будет выглядеть примерно так:

Код: Выделить всё

SELECT *
FROM user_sports us
JOIN sports       s ON s.id            = us.sport_id
AND s.sport         = 'baseball'
JOIN baseball     b ON b.user_sport_id = us.id

Код: Выделить всё

class UserSports(Base):
__tablename__ = "user_sports"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
user_id: Mapped[int] = mapped_column(nullable=False)
sport_id: Mapped[int] = mapped_column(ForeignKey('states.id', nullable=False)
sports: Mapped['Sports'] = relationship(back_populates='user_sports', foreign_keys=[sport_id])
baseball: Mapped['Baseball'] = relationship(back_populates='user_sports', primaryjoin='and_(UserSports.id == Baseball.user_sport_id, UserSports.sport_id.has(sport='baseball'))'

class Baseball(Base):
__tablename__ = "baseball"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
user_id: Mapped[int] = mapped(column(ForeignKey('users.id', nullable=False)
position: Mapped[str] = mapped_column(TEXT, nullable=False)
team: Mapped[str] = mapped_column(TEXT, nullable=False)
number: Mapped[int] = mapped_column(nullable=False)
user_sports: Mapped['UserSports'] = relationship(back_populates='baseball', foreign_key='user_id')

class Sports(Base):
__tablename__ = "sports"
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
sport: Mapped[str] = mapped_column(TEXT, nullable=False)
user_sports: Mappped[List["UserSports"]] = relationship(back_populates='sports', foreign_key='UserSports.sport_id')
Когда я запускаю это, я получаю следующую ошибку.

Код: Выделить всё

Property 'sport_id' is not an instance of ColumnProperty (i.e. does not correspond directly to a Column).
Я знаю, что где-то напутал с основным соединением, но не знаю, как это исправить. Я не хочу передавать идентификатор из sport_id, потому что я не буду знать этот идентификатор. Я попытался воспользоваться документацией.

Подробнее здесь: https://stackoverflow.com/questions/788 ... er-table-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»