我有一个SQLAlchemy查询对象,想获取已编译的SQL语句的文本,并绑定了所有参数(例如,否%s或其他变量正等待语句编译器或MySQLdb方言引擎绑定)。
%s
调用str()查询将显示如下内容:
str()
SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC
我试着在query._params中查找,但这是一个空字典。我使用装饰器的这个示例sqlalchemy.ext.compiler.compiles编写了自己的编译器,但是即使那里的语句仍然有%s我想要的数据。
sqlalchemy.ext.compiler.compiles
我无法弄清楚何时混入参数来创建查询。当检查查询对象时,它们始终是一个空字典(尽管查询执行得很好,并且当您打开echo记录时引擎会打印出来)。
我开始收到消息,SQLAlchemy不想让我知道底层查询,因为它破坏了表达式API接口的所有不同DB- API的一般性质。我不在乎查询是否在我发现查询之前就已经执行了;我只是想知道!
该博客提供了更新的答案。
从博客文章中引用,建议并为我工作。
>>> from sqlalchemy.dialects import postgresql >>> print str(q.statement.compile(dialect=postgresql.dialect()))
其中q定义为:
>>> q = DBSession.query(model.Name).distinct(model.Name.value) \ .order_by(model.Name.value)
或者只是任何一种session.query()。
感谢Nicolas Cadou的回答!希望对其他在这里搜索的人有所帮助。