Как сделать автоматическое соединение с помощью ядра SQLAlchemy?

У меня есть приведенная ниже схема ORM в sqlalchemy, которая представляет мою БД, и мне нужно автоматическое соединение со счетами-фактурами от клиента.

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import Column, ForeignKey, Integer, String

Base = declarative_base()


class Customer(Base):
    __tablename__ = 'customers'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    address = Column(String)
    email = Column(String)
    invoices = relationship("Invoice", primaryjoin="Customer.id == Invoice.custid")


class Invoice(Base):
    __tablename__ = 'invoices'
    id = Column(Integer, primary_key=True)
    custid = Column(Integer, ForeignKey("customers.id"))
    invno = Column(Integer)
    amount = Column(Integer)

Если я использую это утверждение:

s = session.query(Customer, Invoice).join(Customer.invoices)

Это дает мне правильный результат:

SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email, invoices.id AS invoices_id, invoices.custid AS invoices_custid, invoices.invno AS invoices_invno, invoices.amount AS invoices_amount FROM customers JOIN invoices ON customers.id = invoices.custid

Но я хочу использовать ядро ​​​​SQL Alchemy, используя Select, Join, без запроса, как я могу это сделать?

Я пробовал с:

j = Customer.join(Customer.invoices)
stmt = select([Customer,Invoice]).select_from(j)

но не работает, есть идеи?

Заранее спасибо.


person Joan Triay    schedule 28.10.2020    source источник


Ответы (1)


Результат:

s = select([Customer, Invoice]).select_from(join(Customer, Invoice))
person Joan Triay    schedule 29.10.2020