我有一个SQLAlchemy查询对象,希望获得编译后的SQL语句的文本,并绑定其所有参数(例如,no %s或其他等待语句编译器或MySQLdb方言引擎绑定的变量,等等).

在查询中调用str()会显示如下内容:

SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC

我试着在查询中查找_params,但它是一个空的dict.我用this example of the sqlalchemy.ext.compiler.compiles decorator编写了自己的编译器,但即使是那里的语句,在我需要数据的地方也有%s.

我不太清楚我的参数是什么时候混合在一起创建查询的;当判断查询对象时,它们总是一个空字典(尽管查询执行得很好,当您打开echo日志(log)时,引擎会打印出来).

我开始明白SQLAlchemy不想让我知道底层的查询,因为它打破了表达式API接口的一般性质——所有不同的DB API.我不介意在我发现之前执行查询;我只是想知道!

推荐答案

This博客提供了最新的答案.

引用这篇博文,这是我的建议,也是我的工作.

>>> 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().

感谢尼古拉斯·卡杜的回答!我希望它能帮助其他来这里搜索的人.

Mysql相关问答推荐

是否有一种方法可以在mysql中设置一列,使其自动成为该行的行号的值?

在停靠容器中备份和恢复MySQL数据库时出现Unicode字符问题

如何防止程序中计数器出错

如何使用GROUP BY调优简单SQL查询

数组上的MySQL、JSON_CONTAINS用法

如何获取每日登录用户数?

Mysql,显示谁已经和没有 Select 退出巴士服务

使用适配器设计模式和外观设计模式实现

将sql查询转换为sequelize

如何计算每行的剩余金额?

限制正则​​表达式中多字符通配符的范围

查询给出错误时的 mySQL Group_Concat 和 Case

如果在表中多次发现 a 列中的相同值,则排除所有行

如何根据特定条件从mysql数据库中 Select 查询

MYSQL:创建表中的索引关键字以及何时使用它

PHP 判断 NULL

判断多个列的一个值

int(11) 和 int(11) UNSIGNED 有什么区别?

如何在执行 sql 脚本时 echo 打印语句

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'