概述
GQL 是一種類似於 SQL 的查詢語言,適用於查詢 App Engine 資料庫。有關 GQL 語法和功能的完整討論,請參閱 GQL 參考。
GqlQuery 構造構造函式採用以 SELECT * FROM model-name 開頭的完整 GQL 語句作為參數。WHERE 子句中的值可以是字元串或數字字母,或可以使用值的參數綁定。綁定參數最初可以使用位置或關鍵字參數綁定到構造函式。
query =GqlQuery("SELECT * FROM Song WHERE composer = 'Lennon, John'")
query =GqlQuery("SELECT * FROM Song WHERE composer = :1","Lennon, John")
query =GqlQuery("SELECT * FROM Song WHERE composer = :composer",composer="Lennon, John")為了方便起見,Model 和 Expando 類有種可返回 GqlQuery 實例的 gql() 方法。這種方法在不使用 SELECT * FROM model-name 的情況下採用 GQL 查詢字元串,這是暗含的。
query =Song.gql("WHERE composer = 'Lennon, John'")與使用 Query 類一樣,應用程式通過調用 fetch() 方法或通過將 GqlQuery 對象視為可疊代來執行查詢和訪問結果。有關詳細信息,請參閱 Query 文檔。
Query 和 GqlQuery 訪問結果的方式之間有一個不同之處:如果 GQL 查詢包括一個 LIMIT 子句或一個 OFFSET 子句,將採用等效 fetch() 方法檢索結果,即使疊代器接口用於訪問結果也是如此。當某個 GqlQuery(其 GQL 包含 LIMIT 或 OFFSET)被作為可疊代使用時,將對資料庫進行一次調用以抓取所有結果,然後疊代器從記憶體返回每個結果。
forsong inq:
printsong.title另請參閱 Query,一種使用對象和方法而不是 GQL 來準備查詢的 Query 類。
注意:支持資料庫查詢的基於索引的數據結構和算法不支持某些種類的查詢。有關詳細信息,請參閱查詢和索引:對查詢的限制。
構造函式
GqlQuery 類的構造函式如下定義:
class GqlQuery(query_string, *args, **kwds)使用 App Engine 查詢語言 GQL 的 Query 對象。
參數:
query_string以 SELECT * FROM model-name 開頭的完整 GQL 語句。*args位置參數綁定。**kwds關鍵字參數綁定。
實例方法
GqlQuery 實例有以下方法:
bind(*args, **kwds)重新綁定參數以進行查詢。新查詢將在重新綁定參數後第一次訪問結果時執行。
重複使用帶有新參數的 GqlQuery 對象比構建新的 GqlQuery 對象更快,因為重新綁定不需要再次解析查詢字元串。
參數:
*args新位置參數綁定。**kwds新關鍵字參數綁定。get()執行查詢,然後返回第一個結果,或如果查詢沒有返回結果則返回 None。
get() 暗含 [limit] 為 1,並覆蓋 GQL 查詢的 LIMIT 子句(如果有)。最多從資料庫中抓取 1 個結果。
fetch(limit, offset=0)執行查詢,然後返回結果。
limit 和 offset 參數控制從資料庫抓取的結果數量,以及通過 fetch() 方法返回的結果數量:
資料庫會抓取 offset + limit 個結果到應用程式。資料庫本身不會跳過前 offset 個結果。
fetch() 方法則會跳過前 offset 個結果,然後返回剩餘結果(limit 個結果)。
該查詢具有與 offset 加 limit 數量之和成線性對應關係的性能特徵。
注意:fetch() 返回最多 1000 個結果。如果有超過 1000 個實體與查詢相匹配,且並未指定任何限制或使用了大於 1000 的限制,則 fetch() 僅返回前 1000 個結果。
參數:
limit要返回的結果的數量。該值覆蓋 CQL 查詢語句中的 LIMIT 子句(如果有)。如果沒有足夠的符合條件的可用結果,則可能被返回少於 limit 的結果。
limit 是必需參數。當結果數未知時,可疊代地使用 GqlQuery 對象而不是使用 fetch() 方法從查詢獲取每個結果。
offset要跳過的結果的數量。該值覆蓋 CQL 查詢語句中的 OFFSET 子句或 LIMIT 子句中的偏移(如果有)。返回值是一個 Model 實例列表,可能是一個空列表。
count(limit)返回該查詢抓取的結果的數量。
count() 比通過常量係數檢索所有數據要快一些,但是運行時間仍隨結果集大小而增加。如果預期的數量很少,或指定了一個 limit,那么,最好只使用 count()。
注意:count() 返回的最大值為 1000。如果與查詢條件相匹配的實體的實際數量超出了最大值,count() 會只返回 1000 個結果。
參數:
limit要計數的結果的最大數量。該值覆蓋 CQL 查詢語句中的 LIMIT 子句(如果有)。