2017-02-21 80 views
0

今天我使用的sql_debug(True)幫助我查看查詢但沒有值。如何在ponyorm中查看具有值的完整查詢

我怎麼能看到ponyorm如何翻譯查詢的值?

非常感謝。 這是我正在使用的查詢的一個示例。

with db_session: 
    access = select(p for p in Access if raw_sql('(lower(first_name) = lower($first_name) and lower(last_name) = lower($last_name)) ' 
                  'or (lower(first_name) = lower($last_name) and lower(last_name) = lower($first_name)) ' 
                  'or (lower(facebook_url) = lower($facebook_url)) ' 
                  'or (lower(twitter_url) = lower($twitter_url)) ' 
                  'or (lower(linkedin_url) = lower($linkedin_url)) ')) 
     .order_by(desc(Access.twitter_url),desc(Access.facebook_url),desc(Access.linkedin_url), 
        desc(Access.facebook_url)) 
print(access.get_sql()) 

回答

0

有一個名爲方法get_sql()

query_obj = select(c for c in Category if c.name.startswith('v')) 
sql = query_obj.get_sql() 
print(sql) 

輸出:

SELECT "c"."id", "c"."name" 
FROM "category" "c" 
WHERE "c"."name" LIKE 'v%%' 

代碼繼續:

for obj in query_obj: 
    print('id:', obj.id, 'name:', obj.name) 

輸出:

id: 1 name: viki 

這裏是將文檔https://docs.ponyorm.com/api_reference.html#Query.get_sql

您可以登錄SQL或簡單地打印它的鏈接。

更新:

OP更新的問題:

如果SQL查詢中像$name它是作爲SQL參數傳遞的變量。

first_name = 'viki' 
query = select(c for c in Category if raw_sql('(lower(name) = lower($first_name))')) 
query.get_sql() 

所以get_sql()將一個佔位符返回值,輸出看起來就像這樣:

'SELECT "c"."id", "c"."name", "c"."age"\nFROM "Category" "c"\nWHERE (lower(name) = lower(?))' 

如果我們想沒有佔位符應該有查詢,然後我們能夠避免通過直接SQL來查詢,而不是在Python中單獨構建它。

像這樣:

query = select(c for C in Category if c.name == 'viki') 
query.get_sql() 

輸出:

'SELECT "c"."id", "c"."name", "c"."age"\nFROM "Category" "c"\nWHERE "c"."name" = \'viki\'' 
+0

十分感謝,但它仍然沒有顯示的值,我想和值結束SQL結果。 SELECT「c」。「id」,「c」。「name」 FROM「category」「c」 WHERE「c」。「name」LIKE'some value' – Yan

+0

@Yan難道這不正確嗎?在WHERE「c」。「name」LIKE'v %%'''在sql? –

+0

它的確如此。 但我想看到的價值,而不是'v %%' – Yan