iBatis связывает SQL DML (или определения SQL) в файле XML. В нем особое внимание уделяется сопоставлению между SQL и некоторой объектной моделью, определенной в другом месте.
SQL Alchemy может это сделать - но это не очень полное решение. Как iBatis, вы можете просто иметь определения таблиц SQL и сопоставление между таблицами и определениями класса Python.
Что более полно, так это определение класса, которое равно также определение базы данных SQL. Если определение класса генерирует SQL-таблицу SQL, а также запрос и обработку DML, это намного более полно.
Я флип-флоп между SQLAlchemy и ORM Django. SQLAlchemy можно использовать в iBatis. Но я предпочитаю сделать дизайн объекта центральным и оставить реализацию SQL на основе объектов набором инструментов.
Я использую SQLAlchemy для больших, пакетных, автономных проектов. DB Loads, преобразования схем, отчеты DW и т.п. работают хорошо. В этих проектах основное внимание уделяется реляционному представлению данных, а не объектной модели. Например, созданный SQL может быть перемещен в хранимые процедуры PL/SQL, например.
Я использую Django для веб-приложений, используя свои встроенные возможности ORM. Вы можете с небольшой работой отделить Django ORM от остальной среды Django. Вы можете установить provide global settings, чтобы связать приложение с конкретной базой данных без использования отдельного модуля настроек.
Django включает в себя ряд общих отношений (Foreign Key, Many-to-Many, One-to-One), для которых он может управлять реализацией SQL. Он генерирует определения ключей и индексов для прикрепленной базы данных.
Если ваша проблема в основном объектно-ориентированная, а база данных используется для настойчивости, то почти прозрачный слой ORM Django имеет свои преимущества.
Если ваша проблема в основном связана с центральной обработкой SQL, то возможность просмотра сгенерированного SQL в SQLAlchemy имеет свои преимущества.