GQL查询ReferenceProperty用于没有引用的对象

时间:2013-10-20 13:05:42

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

我有以下模型,其中一个Thing可以有多个Action

class Thing(polymodel.PolyModel):
    create_date = db.DateTimeProperty(required=True)

class Action(db.Model):
    thing = db.ReferenceProperty(Thing, collection_name='action')    
    action_by = db.StringProperty(required=True)

我需要使用原始GQL来计算没有操作的Thing个数。它应该是这样的:

SELECT * FROM Thing WHERE action = []

我有以下限制:

  1. 我必须使用原始GQL(因为实际查询包含常规查询不支持的DISTINCT)。
  2. 我无法获取数据并检查内容,因为我使用远程api并且只想计算数据以节省带宽。
  3. 可以吗?

1 个答案:

答案 0 :(得分:3)

首先,你完全错误地说你必须使用GQL,因为正常的查询不支持DISTINCT:你可以用GQL做 nothing 你不能用正常查询。数据存储区不是数据库,并且没有ORM调用必须转换为的基础查询语言;相反,实际上GQL调用以与模型调用完全相同的方式转换为RPC调用,并且根本不使用GQL。在这种特定情况下,Query class具有distinct参数。

但是,数据存储区不是SQL数据库的另一个含义是您无法执行JOIN。没有办法根据Action中的任何属性选择Thing的实例,无论它是特定的字段值还是没有任何关系。唯一的方法是获取Action.thing的所有不同值,然后是Things,并计算出设置差异。