我正在使用SQLAlchemy,并希望记录已执行的 SQL代码(即已引用和替换所有绑定参数的代码)。对于 psycopg2 ,可以使用query
对象的Cursor
属性(请参阅psycopg documentation)。对于 MySQLdb ,可以使用_last_executed
对象的Cursor
属性。
我的问题是:如何使用SQLAlchemy接口检索刚刚执行的查询字符串?它是否提供此类功能,还是应该编写自己的帮助函数?
提前感谢您的帮助。
答案 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