【问题标题】:Google App Engine Projection QueryGoogle App Engine 投影查询
【发布时间】:2012-06-15 23:22:47
【问题描述】:

我有一个这样的模型:

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()

没关系,返回一切。但是为什么我不能使用第一个查询?

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    您不能投影未编入索引的属性。如documentation中所述

    对可以投影的属性有一些限制: 您只能投影索引属性。这意味着不支持投影 Text、Blob 或其他明确标记为未索引的属性。

    您可以通过在管理控制台的数据存储查看器中运行查询来找出需要哪些索引。

    【讨论】:

    • 嗯。我认为如果这个查询被拒绝而不是默默地不返回任何东西会很好。我在 NDB 中针对相应问题提交了一个错误:code.google.com/p/appengine-ndb-experiment/issues/…
    • 从 SDK 版本 1.7.0 开始,至少对于 Windows,即使是未索引的属性也可以使用投影进行查询。
    • 从 1.9 开始,您不能投影未索引的属性,这是一种耻辱。
    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多