#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)
)