SQLAlchemy:揭开真正的查询
使用 SQLAlchemy 时,检查正在执行的实际 SQL 查询可能很有价值。虽然 SQLAlchemy 通常依赖于绑定参数,但有一些方法可以生成相应的 SQL 语句,包括实际值。
通用解决方案
在大多数情况下,您可以轻松地获取 SQLAlchemy 语句或查询的 SQL 字符串表示形式:
<code class="python">import sqlalchemy as sa print(str(statement))</code>
这适用于 ORM 查询和 select() 或其他语句。如果需要,您可以将语句编译为特定的方言或引擎:
<code class="python">print(statement.compile(someengine))</code>
或者不指定引擎:
<code class="python">from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))</code>
内联绑定参数
为了在 SQL 字符串中包含实际值而不是绑定参数,SQLAlchemy 通过编译_kwargs 中的 'literal_binds' 标志提供有限的支持:
<code class="python">from sqlalchemy import table, column, select t = table('t', column('x')) s = select([t]).where(t.c.x == 5) print(s.compile(compile_kwargs={"literal_binds": True}))</code>
但是,此方法仅适用于基本类型和可能无法处理没有预先分配值的绑定参数。对于自定义类型,您可以使用 process_literal_param 方法实现 TypeDecorator:
<code class="python">class MyFancyType(TypeDecorator): def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value</code>
这允许您根据您的特定要求自定义值的呈现。
以上是如何在SQLAlchemy中获取真实的SQL查询?的详细内容。更多信息请关注PHP中文网其他相关文章!