谷歌应用引擎投影查询

3

我有一个像这样的模型:

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

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

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

返回的是 None,但当我使用这个查询时:
user = db.GqlQuery("SELECT * FROM Users WHERE user_name = :1", username).get()

没问题,返回了所有内容。但是为什么我不能使用第一个查询呢?

1个回答

7

您不能投影未索引的属性。如文档中所述。

有一些限制,即只能投影索引属性。这意味着不支持投影显式标记为未索引的Text、Blob或其他属性。

您可以通过在管理控制台的Datastore Viewer中运行查询来查找所需的索引。


2
嗯,我认为拒绝此查询而不是静默返回空将是很好的。我已经针对NDB中相应的问题提交了错误报告:http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=189&thanks=189&ts=1339860107 - Guido van Rossum
1
从SDK版本1.7.0开始,至少对于Windows,即使是未索引的属性也可以通过投影进行查询。 - Abhranil Das
从1.9版本开始,您无法投影未索引的属性,这真是遗憾。 - Daniel Goldberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接