从 SQLAlchemy 表达式检索原始、编译的 SQL
在 SQLAlchemy 中,从表达式对象获取原始、编译的 SQL 查询可能是一个挑战。虽然表达式 API 提供了方便的接口,但它使底层 SQL 隐藏在视图之外。
努力查找参数
您已检查了查询。_params 字典,但发现尽管查询执行成功,但它还是空的。这是因为 SQLAlchemy 有意将参数封装在查询对象中。通过这样做,它确保了与各种 DB-API 的兼容性。
使用文字绑定
但是,SQLAlchemy 文档通过使用literal_binds 提供了一种解决方法:
print(q.statement.compile(compile_kwargs={"literal_binds": True}))
这种方法允许您打印包含参数的查询语句。但它仅适用于基本类型(例如整数、字符串),不支持没有预定义值的 bindparam()。
安全警告
文档强烈建议不要在不受信任的输入中使用此技术。 SQLAlchemy 的类型强制转换机制并非万无一失,可能会导致安全漏洞。
结论
虽然默认情况下不直接公开,但可以从 SQLAlchemy 检索原始的编译 SQL使用literal_binds关键字参数的表达式。然而,在处理不受信任的数据时务必小心谨慎。
以上是如何从 SQLAlchemy 表达式中检索原始编译的 SQL?的详细内容。更多信息请关注PHP中文网其他相关文章!