簡體   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