我有以下模型,其中一个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 = []
我有以下限制:
可以吗?
答案 0 :(得分:3)
首先,你完全错误地说你必须使用GQL,因为正常的查询不支持DISTINCT:你可以用GQL做 nothing 你不能用正常查询。数据存储区不是数据库,并且没有ORM调用必须转换为的基础查询语言;相反,实际上GQL调用以与模型调用完全相同的方式转换为RPC调用,并且根本不使用GQL。在这种特定情况下,Query
class具有distinct
参数。
但是,数据存储区不是SQL数据库的另一个含义是您无法执行JOIN。没有办法根据Action中的任何属性选择Thing的实例,无论它是特定的字段值还是没有任何关系。唯一的方法是获取Action.thing
的所有不同值,然后是Things
,并计算出设置差异。