如何从SQLAlchemy获取执行的SQL代码
我正在使用SQLAlchemy,想要记录已经执行的SQL代码,也就是那些所有参数都已经替换成具体值的代码。对于psycopg2,可以通过Cursor
对象的query
属性来实现(具体可以查看psycopg的文档)。而对于MySQLdb,则可以通过Cursor
对象的_last_executed
属性来获取。
我的问题是:如何通过SQLAlchemy的接口获取刚刚执行的查询字符串?它是否提供这样的功能,还是我需要自己写一个辅助函数?
提前感谢任何帮助。
1 个回答
25
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