Google App Engine投影查询

eca*_*buk 3 python google-app-engine google-cloud-datastore

我有这样的模型:

class Users(db.Model):
   email = db.EmailProperty(required=True, indexed=True)
   user_name = db.StringProperty(required=True, indexed=True)
   api_key = db.StringProperty(required=False, indexed=False)
   active = db.BooleanProperty(required=True, indexed=False)
   real_name = db.StringProperty(required=False, indexed=False)
   ...etc
Run Code Online (Sandbox Code Playgroud)

当我尝试进行这样的查询时:

user = db.GqlQuery("SELECT email, api_key, active FROM Users WHERE user_name = :1", username).get()
Run Code Online (Sandbox Code Playgroud)

它返回None,但是当我使用这个查询时:

user = db.GqlQuery("SELECT * FROM Users WHERE user_name = :1", username).get()
Run Code Online (Sandbox Code Playgroud)

没关系,退货.但为什么我不能使用第一个查询?

Seb*_*eft 7

您无法投影未编入索引的属性.如文档中所述

可投影的属性存在一些限制:您只能投影索引属性.这意味着不支持将Text,Blob或其他明确标记为未索引的属性投影.

您可以在管理控制台的数据存储查看器中查找运行查询所需的索引.

  • 嗯.我认为如果这个查询被拒绝而不是默默地返回任何内容会很好.我在NDB中提出了相应问题的错误:http://code.google.com/p/appengine-ndb-experiment/issues/detail?id = 189&thanks = 189&ts = 1339860107 (2认同)