Получение результатов от многих ко многим отношениям с SQLALCHEMYPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Получение результатов от многих ко многим отношениям с SQLALCHEMY

Сообщение Anonymous »

У меня есть следующие классы по моделям.py.
У меня есть много отношений между игроком и таблицей RSlevel через таблицу RSDetail.
Регистрация работает хорошо. < /p>
RsDetail = Table('RsDetail', Base.metadata,
Column('id', Integer, primary_key=True, autoincrement=True),
Column('playerId', Integer, ForeignKey('players.id')),
Column('rslevelId', Integer, ForeignKey('rslevel.id')),
)

class Player(Base):
__tablename__ = "players"

# Columns for its data
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(60), nullable=False)
discord_id: Mapped[int] = mapped_column(Integer, unique=True, nullable=False)
guild_id: Mapped[int] = mapped_column(Integer, ForeignKey("guilds.id"), nullable=False)

# Relationships to other databases
guild: Mapped["Guild"] = relationship("Guild", back_populates="players")
rs: Mapped[list["Rslevel"]] = relationship(secondary=RsDetail, back_populates="players")

def __repr__(self):
return f"id: {self.id}, name: {self.name}"

class Rslevel(Base):
__tablename__ = "rslevel"

# Columns for its data
id: Mapped[int] = mapped_column(primary_key=True)
level: Mapped[int] = mapped_column(nullable=False)
discord_role: Mapped[int] = mapped_column(nullable=False, unique=True)
guild_id: Mapped[int] = mapped_column(Integer, ForeignKey("guilds.id"), nullable=True)
drs: Mapped[int] = mapped_column(nullable=False)

# Relationships to other databases
players: Mapped[list["Player"]] = relationship(secondary=RsDetail, back_populates="rs")
guild: Mapped["Guild"] = relationship("Guild", back_populates="rslevels")

def __repr__(self):
return f"id: {self.id}, level: {self.level}"
< /code>
Теперь я хотел бы получить все записи RSDetail, а также подробности для связанных игроков и rslevel. < /p>
Я не могу заставить его работать И я немного потерян в отношении того, как это сделать. Только PlayerId и RSlevelid из таблицы RSDetail. < /P>
stmt = select(RsDetail).join(Rslevel, RsDetail.c.rslevelId == Rslevel.id).join(Player, RsDetail.c.playerId == Player.id).join(Guild, Rslevel.guild_id == Guild.id).where(Guild.discord_id == guild_id)
rs_list = session.execute(stmt).all()
< /code>
Я хотел бы получить доступ к результатам как что -то вроде: < /p>
for rs in rs_list:
print(rs.player.name, rs.rslevel.level)


Подробнее здесь: https://stackoverflow.com/questions/794 ... sqlalchemy
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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