Python GQL查询的意外空结果
令人惊讶的是,在完成了大量的查询之后,没有问题。我遇到了第一个奇怪的GQL问题 以下是称为反馈的模型的属性:Python GQL查询的意外空结果,python,google-app-engine,gql,gqlquery,Python,Google App Engine,Gql,Gqlquery,令人惊讶的是,在完成了大量的查询之后,没有问题。我遇到了第一个奇怪的GQL问题 以下是称为反馈的模型的属性: content date title type votes_count written_by 在index.yaml中配置了以下内容: - kind: Feedback properties: - name: type - name: date direction: desc 当我查询所有按日期排序的反馈数据时,它会返回所有结果: quer
content date title type votes_count written_by
在index.yaml中配置了以下内容:
- kind: Feedback
properties:
- name: type
- name: date
direction: desc
当我查询所有按日期排序的反馈数据时,它会返回所有结果:
query = GqlQuery("SELECT __key__ FROM Feedback ORDER BY date DESC")
type属性存储在type=db.IntegerProperty(默认值=1,必需值=False,索引值=True)中,共有8行类型为整数1的反馈数据
然而,当我询问:
query = GqlQuery("SELECT __key__ FROM Feedback WHERE type = :1 ORDER BY date DESC", type)
它总是给我返回空结果。出了什么问题
更新
def get_keys_by_feedback_type(type_type):
if type_type == FeedbackCode.ALL:
query = GqlQuery("SELECT __key__ FROM Feedback ORDER BY date DESC")
else:
query = GqlQuery("SELECT __key__ FROM Feedback WHERE type = :1 ORDER BY date DESC", type_type)
return query
results = Feedback.get_keys_by_feedback_type(int(feedback_type_filter))
for feedback_key in results:
# iterate the query results
该索引用于:
Feedback
type ▲ , date ▼ Serving
我一开始描述得不清楚,这是不好的。我将分享解决方案,以防万一,如果其他人面临同样的问题 根本原因是我对应用程序引擎索引的了解不足。早些时候,“type”属性没有索引,因为在最近的需求更改之前,我不打算过滤它 因此,我从属性定义模型中为“type”属性编制了索引,如问题所示。但是,由于本文解释的原因,“type”属性仍然未编制索引 如果使用未编制索引的属性创建了现有记录,则即使更改实体(类)定义以使该属性再次编制索引,这些记录的该属性仍将继续未编制索引。因此,对该属性进行过滤的查询不会返回这些记录 因此,解决办法是: 将以前未索引的属性编入索引的步骤
class Person(db.Model):
name = db.StringProperty()
age = db.IntegerProperty(indexed=True)
所以,我的GQL从问题的所有方面都没有问题。这都是因为“type”属性没有索引。无论如何,还是要感谢@Adam Crossland提供的一些见解和建议。我一开始描述得不清楚,这是我的错。我将分享解决方案,以防万一,如果其他人面临同样的问题 根本原因是我对应用程序引擎索引的了解不足。早些时候,“type”属性没有索引,因为在最近的需求更改之前,我不打算过滤它 因此,我从属性定义模型中为“type”属性编制了索引,如问题所示。但是,由于本文解释的原因,“type”属性仍然未编制索引 如果使用未编制索引的属性创建了现有记录,则即使更改实体(类)定义以使该属性再次编制索引,这些记录的该属性仍将继续未编制索引。因此,对该属性进行过滤的查询不会返回这些记录 因此,解决办法是: 将以前未索引的属性编入索引的步骤
class Person(db.Model):
name = db.StringProperty()
age = db.IntegerProperty(indexed=True)
所以,我的GQL从问题的所有方面都没有问题。这都是因为“type”属性没有索引。无论如何,非常感谢@Adam Crossland提供的一些见解和建议。尝试使用
类型之外的内容作为变量名;这是Python提供的一个函数,虽然没有什么可以阻止您将其更改为其他函数(Python非常动态),但您确实应该不惜一切代价避免这样做。此外,如果您显式使用数字1
而不是变量,则查询是否会返回结果?哈哈……在您要求我更改“type”变量之后,我明确尝试将1作为查询,但在执行return query.count(limit=1)时仍然返回空结果。还有其他建议吗?也许我再次尝试部署以双重确认,以下是我尝试的更多内容。我查询了投票计数和类型属性,并且都返回了空结果。我真的不知道出了什么问题(您确定您的数据存储中仍有数据吗?使用开发服务器,每次启动时,本地数据存储可能会重新创建为空。请尝试使用类型
以外的内容作为变量名;它是Python提供的一个函数,尽管没有什么可以阻止您将其更改为其他内容(Python是非常动态的)您真的应该不惜一切代价避免这样做。另外,如果显式使用数字1
而不是变量,查询是否返回结果?哈哈……在您要求我更改“type”变量后,我显式尝试将1作为查询,但在执行return query.count时仍然返回空结果(limit=1)还有其他建议吗?也许我再次尝试部署以双重确认我尝试了更多。我查询了投票计数和类型属性,并且都返回了空结果。我真的不知道哪里出了问题:(您确定您的数据存储中仍有数据吗?对于开发服务器,每次启动时都可能会重新创建空的本地数据存储。