为任何查询获取“原始”SQL的最简单的方法就是print it (实际上,将其转换为str)。
但是,这并不适用于count()查询,因为count()是“触发”方法--这种方法被声明为“这将导致底层查询的执行”。其他“触发”方法包括all()、first()等。
如何获得此类方法的SQL?
我对count()特别感兴趣,因为它以某种方式转换底层查询(实际上,这种方式被明确地描述为在医生里,但情况可能有所不同)。其他方法也可以更改生成的SQL,例如first()。
因此,有时获取此类查询的原始SQL是有用的,以便研究事情是如何进行的。
我读到了关于“获取原始SQL”的答案,但这种情况很特殊,因为此类方法不返回Query对象。
请注意,我的意思是我需要一个已有的Query对象的SQL,这些对象已经以某种方式构造了。
发布于 2019-02-11 14:56:35
下面的示例将返回任何查询对象的计数,然后可以将其转换为字符串表示形式:
from sqlalchemy import func
...
existing_query = session.query(Something)\
.join(OtherThing)\
.filter(OtherThing.foo = 'FOO')\
.subquery()
query = session.query(func.count(existing_query.c.bar).label('bar_count'))
print(query)
actual_count = query.as_scalar() # Executes query注意,您必须从查询输出中指定要计数的字段。在existing_query.c.bar定义的示例中。
https://stackoverflow.com/questions/54633101
复制相似问题