Python 3.x 如何打印SQLAlchemy生成的实际查询?

Python 3.x 如何打印SQLAlchemy生成的实际查询?,python-3.x,sqlalchemy,flask-sqlalchemy,Python 3.x,Sqlalchemy,Flask Sqlalchemy,我试图将所有SQLAlchemy查询记录到控制台,同时解析查询并填充参数(例如,将:param_1转换为123)。我设法找到了这个,这样就可以了。我遇到的问题是参数并不总是被转换 这是我一直关注的事件- @event.listens_for(Engine, 'after_execute', named=True) def after_cursor_execute(**kw): conn = kw['conn'] params = kw['params'] result =

我试图将所有SQLAlchemy查询记录到控制台,同时解析查询并填充参数(例如,将
:param_1
转换为
123
)。我设法找到了这个,这样就可以了。我遇到的问题是参数并不总是被转换

这是我一直关注的事件-

@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参数“%(38287064 param)s”,此处不允许有可渲染值。

但是,这个查询将像我预期的那样将
:param_1
转换为
123
-

db.session.query(Model).filter(Model.id == 123).first()
有没有办法翻译使用SQLAlchemy运行的所有查询


FWIW我使用
pyodbc
驱动程序瞄准SQL Server。

如果设置日志框架,可以通过在信息级别设置sqlalchemy.engine记录器来记录SQL语句,例如:

import logging

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

如果设置日志框架,则可以通过在信息级别设置sqlalchemy.engine记录器来记录SQL语句,例如:

import logging

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

问题是参数没有内联到查询中,这使得在不手动填充缺少的参数占位符的情况下很难复制/粘贴到数据库中。问题是参数没有内联到查询中,这使得在不手动填充缺少的参数的情况下很难复制/粘贴到数据库中占位符。