SQLAlchemy существует. Документы говорят, что использование exists
создает оператор SQL с EXISTS (SELECT 1 ...)
. Как я могу получить EXISTS
, чтобы выбрать столбец по моему выбору?
У меня две модели нравится так:
class Query:
id = Column(UUID)
content = Column(String)
...
class Review:
id = Column(UUID)
query_id = Column(UUID, ForeignKey('query.id'))
...
Я пытаюсь выполнить сложный запрос, который требует получения всех id
s Query
s, которые не имеют Review
. Для этого я написал следующий Python:
reviewed_query_ids_sql_query = session.query(models.Review.query_id)
filtered_queries_sql_query = session.query(models.Query.id).where(~reviewed_query_ids_sql_query.exists())
но это выдает следующий SQL для filtered_queries_sql_query
:
SELECT queries.id
FROM queries
WHERE (EXISTS (SELECT 1
FROM reviews))
Однако необработанный запрос для reviewed_query_ids_sql_query
равен
SELECT reviews.query_id AS reviews_query_id
FROM reviews
Почему существует SELECT 1
, когда базовый запрос выполняет SELECT <column>
? Что бы я хотел сделать для запроса, это SELECT query_id FROM reviews
в запросе с предложением EXISTS
. Как мне этого добиться?