SQLAlchemy не имеет хорошего способа конвертировать вставки, обновления и удаления в вызовы хранимых процедур. Вероятно, было бы не так сложно добавить возможность иметь вместо_ {update, insert, delete} расширения на мапперах, но пока никто не беспокоился. Я считаю требование, чтобы простые операторы DML проходили через хранимые процедуры довольно глупо. Это действительно не предлагает ничего, что вы не могли бы сделать с триггерами.
Если вы не можете избежать глупости, есть несколько способов, с помощью которых вы можете использовать SQLAlchemy. Вы потеряете часть функциональности ORM. Вы можете создавать объекты ORM из результатов хранимых процедур, используя query (Obj) .from_statement (text ("...")), просто чтобы метки столбцов в выражении соответствовали именам столбцов, которые вы указали SQLAlchemy для сопоставления.
Один из способов справиться с операторами DML - отключить автоматическую очистку и вместо очистки пройти через атрибуты сеансов .new, .dirty и .deleted, чтобы увидеть, что изменилось, выполнить соответствующие операторы как вызовы хранимых процедур и удалить объекты до совершение.
Или вы можете просто отказаться от отслеживания состояния SQLAlchemy и напрямую вызывать вызовы хранимых процедур.