我正在尝试将所有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。
答案 0 :(得分:0)
如果设置了日志记录框架,则可以通过将sqlalchemy.engine记录器设置为INFO级别来获取记录的SQL语句,例如:
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)