当前位置: 首页 > 工具软件 > gql > 使用案例 >

GqlQuery 类

颛孙森
2023-12-01

http://wapbaike.baidu.com/view/8965981.htm?uid=D0604A052A48B0F5013EC29A99F19073&bd_page_type=1&st=3&step=2&net=0&ldr=0

概述

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 子句(如果有)。

 类似资料: