Как использовать JOIN и SELECT КАК вместе в SQLAlchemy?

#python #sql #join #sqlalchemy

#питон #sql #Присоединиться #sql — алхимия

Вопрос:

У меня есть две следующие таблицы.

Таблица пользователей

ID Имя Адрес электронной почты
32 Здравствуйте e@mail.com
23 Мир p@mail.com

Таблица продаж

ID Идентификатор продавца CustomerID Количество
4 32 23 25

Я хочу объединить таблицы следующим образом, чтобы получить этот результат. Здесь я хочу получать только записи, в которых идентификатор клиента равен 23.

ID Идентификатор продавца Имя продавца SellerEmail Количество
4 32 Здравствуйте. e@mail.com 25.

А также выполните другое соединение таким образом. Здесь я хочу получать только записи, в которых идентификатор продавца равен 32.

ID CustomerID Пользовательское имя CustomerEmail Количество
4 23 Мир p@mail.com 25.

Мой код для обеих таблиц

 class Users(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String)
    email = Column(String, unique=True, index=True, nullable=False)

class Sales(Base):
    __tablename__="sales"

    id = Column(Integer, primary_key=True, index=True)
    seller_id = Column(Integer, index=True)
    customer_id = Column(Integer, index=True)
    amount = Column(Integer, index=True)
 

Я смог добиться этого, используя необработанный SQL со следующим

 SELECT (sales.id), name as SellerName, email as SellerEmail, Amount
FROM sales
LEFT JOIN user ON sales.SellerId = user.id
WHERE CustomerId = 23
 

Пожалуйста, помогите сделать то же самое с помощью сеанса SQLAlchemy.

Ответ №1:

 query = (    
    session.query(
        Sales.id,
        Users.name.label('SellerName'),
        Users.email.label('SellerEmail'),
        Sales.amount
    )
    .select_from(Sales)
    .outerjoin(Users, Users.id == Sales.seller_id)
    .filter(Sales.customer_id == 23)
)