Как создать подзапрос в SQLAlchemy?
Описание проблемы:
Я использую SQLAlchemy и пытаюсь выполнить следующий SQL-запрос:
SELECT *
FROM Residents
WHERE apartment_id IN (SELECT ID
FROM Apartments
WHERE postcode = 2000)
Не удается выполнить его как сырой SQL с помощью db.engine.execute(sql)
, так как возникает ошибка о том, что мои связи не существуют. Однако я успешно выполняю запросы к базе данных в следующем формате: session.query(Residents).filter_by(???)
.
Я не могу разобраться, как создать нужный мне запрос с использованием этого формата. Можете помочь найти правильный способ составления данного запроса с использованием SQLAlchemy?
1 ответ(ов)
Если вы используете этот метод для обновления вашей базы данных, не забудьте добавить аргумент synchronize_session='fetch'
. Ваша команда будет выглядеть примерно так:
subquery = session.query(Apartments.id).filter(Apartments.postcode==2000).subquery()
query = session.query(Residents).\
filter(Residents.apartment_id.in_(subquery)).\
update({"key": value}, synchronize_session='fetch')
Иначе вы можете столкнуться с проблемами.
SQLAlchemy: Как использовать ORDER BY по убыванию?
SQLAlchemy: В чем разница между flush() и commit()?
SQLAlchemy: выполнение сырого SQL с параметрами в привязках
Почему возникает ошибка вложенной откатки в SQLAlchemy?
Создание и чтение временного файла