【问题标题】:Can Google App Engine projection query return entity keys?Google App Engine 投影查询可以返回实体键吗?
【发布时间】:2012-05-11 16:21:54
【问题描述】:

假设我有:

class Like(db.Model):
    user = db.ReferenceProperty(User,collection_name='likes')
    photo = db.ReferenceProperty(Photo,collection_name='likes_received')
    created = db.DateTimeProperty(auto_now_add=True)

是否可以运行仅返回照片键列表的投影查询?

photos = db.GqlQuery("SELECT photo FROM Like WHERE created < DATETIME(2013, 1, 1, 0, 0, 0)").fetch(10)

上面的代码产生:

BadValueError: Unsupported data type (<class 'models.Photo'>)

【问题讨论】:

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


    【解决方案1】:

    对不起,我的第一个答案是错误的。投影查询存在一个真正的问题——ReferenceProperty (尚不)受支持。阿尔弗雷德正在调查这个;由于 1.6.6 预发行版 SDK 今天发布了,而且这已经存在于 1.6.5 SDK 中,我怀疑我们是否会在 1.6.6 中修复这个问题,但 1.6.7 是可能的。

    作为解决方法,您可以使用 db.ListProperty(db.Key),它是一个键列表(您只存储一个键),或者一个 StringProperty,其值为键的 str()。

    【讨论】:

    • 太棒了,感谢您提供的信息和建议的解决方法!
    【解决方案2】:

    听起来您的照片类尚未导入。

    【讨论】:

    • 您能否提供更多信息以了解如何使其正常工作?我已经尝试了几乎所有我能想到的排列,并且在投影查询中指定 ReferenceProperty 始终失败。当使用投影查询中允许的任何其他属性时,完全相同的代码可以工作(参考文档:developers.google.com/appengine/docs/python/datastore/…
    • 照片类已被导入,它正在文件中的其他地方使用。我通常观察到与@Sologoub 相同的行为。仅在 SDK 中测试,不确定是否也发生在生产中。
    • 嗯。看起来不支持参考属性的投影查询。让我四处打听。
    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多