繁体   English   中英

SQLAlchemy - 如何获取`.count()`查询的原始SQL?

[英]SQLAlchemy - how to get raw SQL of `.count()` queries?

为任何查询获取“原始”SQL的最简单方法就是print它(实际上,将其转换为str )。

但是 ,这不适用于count()查询,因为count()是“触发”方法 - 一种方法,表示为“这导致执行基础查询”。 其他“触发”方法包括all()first()等。

如何获取这些方法的SQL?

我对count()特别感兴趣,因为它以某种方式转换底层查询(实际上,这种方式在docs中有明确描述,但事情可能会有所不同)。 其他方法也可以改变生成的SQL,例如first()

因此,有时获取此类查询的原始SQL以便调查事情是如何进行的。

我阅读了关于“获取原始SQL”的答案,但这种情况很特殊,因为这些方法不会返回Query对象

请注意,我的意思是我需要一个已经以某种方式构造的现有 Query对象的SQL。

以下示例将返回任何查询对象的计数,然后您应该能够将其转换为字符串表示形式:

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定义的示例中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM