如何打印SQLAlchemy生成的实际查询?

时间:2017-01-31 14:49:33

标签: python-3.x sqlalchemy flask-sqlalchemy

我正在尝试将所有SQLAlchemy查询记录到控制台,同时解析查询并填写参数(例如,将:param_1翻译为123)。我设法在SO上找到了这个answer。我遇到的问题是参数不会被翻译。

以下是我锁定到

的事件
@event.listens_for(Engine, 'after_execute', named=True)
def after_cursor_execute(**kw):
    conn = kw['conn']
    params = kw['params']
    result = kw['result']
    stmt = kw['clauseelement']
    multiparams = kw['multiparams']

    print(literalquery(stmt))

运行此查询将无法转换我的参数。相反,我会在输出中看到:param_1 -

Model.query.get(123)

它会产生CompileError个异常,并显示消息Bind parameter '%(38287064 param)s' without a renderable value not allowed here.

但是,此查询会将:param_1翻译为123,就像我期望的那样 -

db.session.query(Model).filter(Model.id == 123).first()

有没有办法翻译使用SQLAlchemy运行的任何和所有查询?

FWIW我使用pyodbc驱动程序定位SQL Server。

1 个答案:

答案 0 :(得分:0)

如果设置了日志记录框架,则可以通过将sqlalchemy.engine记录器设置为INFO级别来获取记录的SQL语句,例如:

import logging

logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)