Как получить исполняемый код SQL из SQLAlchemy - PullRequest
10 голосов
/ 15 июня 2011

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

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

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

1 Ответ

22 голосов
/ 15 июня 2011

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

import logging

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

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

>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...