Как получить выполненный SQL-код из SQLAlchemy

Я использую SQLAlchemy и хотел бы записать исполняемый код SQL (т.е. код со всеми параметрами привязки, уже указанными и замененными). В случае psycopg2 можно было использовать атрибут query объекта Cursor (см. документация psycopg). В случае MySQLdb возможно использование атрибута _last_executed объекта Cursor.

Мой вопрос: как я могу получить только что выполненную строку запроса с использованием интерфейсов SQLAlchemy? Предоставляет ли она такую ​​функциональность или я должен написать свою собственную вспомогательную функцию?

Заранее благодарим за помощь.

Ответ 1

SQLAlchemy использует стандартную библиотеку протоколов Python. Чтобы зарегистрировать запросы к файлу с именем db.log:

import logging

logging.basicConfig(filename='db.log')
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)

При использовании журнала Python убедитесь, что для всех флагов echo установлено значение False, чтобы избежать дублирования ведения журнала. Теперь добавьте что-нибудь в db:

>>> Movie(title=u"Blade Runner", year=1982)
>>> session.commit()

Что будет записывать что-то вроде:

INFO:sqlalchemy.engine.base.Engine:BEGIN (implicit)
INFO:sqlalchemy.engine.base.Engine:INSERT INTO models_movie (title, year, description) VALUES (%(title)s, %(year)s, %(description)s) RETURNING models_movie.id
INFO:sqlalchemy.engine.base.Engine:{'title': u'Blade Runner', 'description': None, 'year': 1982}
INFO:sqlalchemy.engine.base.Engine:COMMIT