Я пытаюсь воспроизвести следующий запрос в SQLAlchemy + MySQL без везения ...SQLAlchemy: Создать запрос на удаление с помощью автообъединения на MySQL
delete paths from paths
join paths as p1 on p1.ancestor = <ID>
where paths.descendant = p1.descendant;
SQLAlchemy кажется бы игнорируя любые объединения, которые я вложил в запрос удаления. Я также попытался использовать подзапрос вместо соединения, но это не разрешено в MySQL (невозможно выбрать из той же таблицы, которую вы хотите удалить). Любая помощь приветствуется.
Обновление: Да, я пытаюсь использовать слой ORM. Вот те запросы, которые я пробовал:
p1 = aliased(Path, name="p1")
db.session.query(Path).join(
p1, p1.ancestor==<ID>
)
.filter(
Path.descendant==p1.Path.descendant
).delete()
а подзапрос вариант, но это не работает на MySQL, так что это не имеет смысла для меня:
q = db.session.query(Path.descendant).filter(Path.ancestor==<ID>).subquery()
db.session.query(Path).filter(Path.descendant.in_(q)).delete(synchronize_session='fetch')
Вы используете слой orm или sql? Можете ли вы включить фрагмент, который вы попробовали? –
ORM, но с удовольствием используем все, что помогает нам достичь запроса. Я обновил свой вопрос с неудачными попытками. – Ole
Связанный: https://stackoverflow.com/questions/25395756/sqlalchemy-how-to-delete-with-join –