揭示 SQLAlchemy 表达式背后的原始编译 SQL
使用 SQLAlchemy 查询对象时,可能需要获取实际的,编译SQL语句以深入了解底层数据库操作。然而,检索带有完全绑定参数的原始查询可能具有挑战性。
一种方法是在编译查询语句时利用compile_kwargs 中的literal_binds 参数。如下图所示:
print(q.statement.compile(compile_kwargs={"literal_binds": True}))
该方法输出编译后的 SQL 查询,并直接插入参数,有效地消除了对 %s 等占位符的需要。然而,值得注意的是,这种技术仅限于简单类型,如整数和字符串。如果使用没有预定义值的bindparam(),它将不会包含在输出中。
文档强调在对不受信任的输入使用此方法时要小心谨慎。它建议不要对用户提供的数据使用此技术,因为 SQLAlchemy 将 Python 值强制转换为 SQL 字符串的机制缺乏针对不受信任输入的安全性。相反,它强烈提倡使用绑定参数来以编程方式调用非 DDL SQL 语句。
以上是如何从 SQLAlchemy 查询中显示原始的编译 SQL?的详细内容。更多信息请关注PHP中文网其他相关文章!