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

Dar*_*zak 10 python sqlalchemy

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

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

在此先感谢您的帮助.

zee*_*kay 22

SQLAlchemy使用标准的Python日志库.将查询记录到名为的文件db.log:

import logging

logging.basicConfig(filename='db.log')
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)

使用Python日志记录时,请确保将所有echo标志设置为False,以避免重复日志记录.现在向db添加一些东西:

>>> Movie(title=u"Blade Runner", year=1982)
>>> session.commit()
Run Code Online (Sandbox Code Playgroud)

哪个会记录如下:

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
Run Code Online (Sandbox Code Playgroud)