Выполнить двойное внутреннее соединение в sqlalchemy - PullRequest
0 голосов
/ 12 марта 2020

У меня есть SQL -запрос, который я хотел бы превратить в sqlalchemy код. Я работаю здесь с уже существующей базой данных в производстве, что затрудняет ее изменение.

SELECT      B.IDTestung, B.Ber1_Konzentration,
            T.Testungstyp, T.Timestamp,
            K.Name_Kl, K.Vorname_Kl
FROM        BCRS AS B
            INNER JOIN
            ttestungen AS T on B.IDTestung = T.IDTESTUNG
            INNER JOIN
            tklienten K on T.IDKLIENT = K.IDKLIENT

Итак, в основном есть таблица BCRS, которая содержит идентификатор для «Testung» и сама таблица ttestungen имеет идентификатор для идентификации клиента. Итак, есть два внутренних объединения для объединения трех таблиц.

Как мне написать это в sqlalchemy? Что я получил так далеко:

from auswertungen.data.data import Tklienten, BCR, Ttestungen

tests = session.query(BCR).join(Ttestungen.tklienten).all()

Это делает первое соединение, но я не знаю, как сделать второе. Я пытался просто добавить еще один .join (...) после первого, но это не сработало.

Вот определение DB (определения): (автоматически создается с помощью sqlacodegen)

class BCR(Base):
    __tablename__ = 'BCRS'

    IDBCRS_Testung = Column(INTEGER(11), primary_key=True)
    IDTestung = Column(ForeignKey('ttestungen.IDTESTUNG', ondelete='CASCADE'), unique=True)
    [...]

    ttestungen = relationship('Ttestungen')


class Ttestungen(Base):
    __tablename__ = 'ttestungen'

    IDTESTUNG = Column(INTEGER(10), primary_key=True)
    IDKLIENT = Column(ForeignKey('tklienten.IDKLIENT'), index=True)
    [...]

    tklienten = relationship('Tklienten')

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете попробовать это ниже:

test = session.query(BCR).join(Ttestungen, BCR.IDTestung == Ttestungen.IDTESTUNG).join(Tklienten, Ttestungen.IDKLIENT == Tklienten.IDKLIENT).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...