Как сделать запрос с subquery sqlalchemy
Помогите, пожалуйста, как сделать данный запрос в sqlalchemy?
select * from vouchers
where "closed" not in (select orders.status from orders
where orders.voucher_id = vouchers.id);
Примеры моделей в sqlalchemy
class Voucher(Base):
__tablename__ = "vouchers"
id = Column(BigInteger, primary_key=True, autoincrement=True)
orders = relationship ("Order")
class Order (Base):
__tablename__ = "orders"
id = Column (BigInteger, primary_key=True, autoincrement=True)
voucher_id = Column (BigInteger, ForeignKey("vouchers.id")
voucher = relationship (Voucher)
Ответы (1 шт):
Автор решения: Alexander Goryushkin
→ Ссылка
Судя по вашему запросу, вы хотите получить все ваучеры статус которых в заказе не равен "closed".
Я бы посоветовал вам сделать это с помощью join. Если все ForeignKey настроены правильно и сущности имеют только одно отношение друг с другом, то вам даже не нужно указывать по каким полям объединять таблицы.
Тогда вам запрос можно написать в sqlalchemy так:
sa_session.query(Voucher).join(Order).filter(Order.status != 'closed').all()
или так, указав поля для связи:
sa_session.query(Voucher).join(Order, Order.voucher_id == Voucher.id).filter(Order.status != 'closed').all()