【发布时间】:2019-02-20 17:37:17
【问题描述】:
为任何查询获取“原始”SQL 的最简单方法就是 print 它(实际上,将其转换为 str)。
但是,这不适用于count() 查询,因为count() 是“触发”方法 - 一种方法被声明为“这会导致执行底层查询”。其他的“开火”方式还有all()、first()等。
如何获取此类方法的 SQL?
我对@987654328@ 特别感兴趣,因为它以某种方式转换了底层查询(实际上,这种方式在in docs 中有明确的描述,但情况可能会有所不同)。其他方法也可以更改生成的 SQL,例如,first()。
因此,有时获取此类查询的原始 SQL 以调查事情的本质是很有用的。
我阅读了有关“获取原始 SQL”的答案,但这种情况很特殊,因为此类方法不返回 Query 对象。
请注意,我的意思是我需要一个 现有 Query 对象的 SQL,这些对象已经以某种方式构造。
【问题讨论】:
-
也许使用
func.count()代替query.count()可能有效? -
您的意思是
func.count(query)?如果是这样,那么不,它不起作用。它甚至会产生无法执行的格式错误的 SQL。
标签: python sqlalchemy