如何从SQLAlchemy检索已执行的SQL代码

时间:2011-06-14 21:30:58

标签: python sqlalchemy

我正在使用SQLAlchemy,并希望记录已执行的 SQL代码(即已引用和替换所有绑定参数的代码)。对于 psycopg2 ,可以使用query对象的Cursor属性(请参阅psycopg documentation)。对于 MySQLdb ,可以使用_last_executed对象的Cursor属性。

我的问题是:如何使用SQLAlchemy接口检索刚刚执行的查询字符串?它是否提供此类功能,还是应该编写自己的帮助函数?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:22)

SQLAlchemy uses the standard Python logging library。将查询记录到名为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