首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy --如何获取`.count()‘查询的原始SQL?

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

Stack Overflow用户
提问于 2019-02-11 14:47:40
回答 1查看 467关注 0票数 4

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

但是,这并不适用于count()查询,因为count()是“触发”方法--这种方法被声明为“这将导致底层查询的执行”。其他“触发”方法包括all()first()等。

如何获得此类方法的SQL?

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

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

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

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

EN

Stack Overflow用户

回答已采纳

发布于 2019-02-11 14:56:35

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

代码语言:javascript
复制
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定义的示例中。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54633101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档