【发布时间】:2012-10-01 17:37:38
【问题描述】:
对于这样的模型:
class Thing(ndb.Model):
visible = ndb.BooleanProperty()
made_by = ndb.KeyProperty(kind=User)
belongs_to = ndb.KeyProperty(kind=AnotherThing)
基本上执行“或”查询,但比较不同的属性,所以我不能使用内置的 OR...我想获取所有 Thing(属于特定的 AnotherThing),它们要么有 @987654324 @ 设置为 True 或 visible 是 False 和 made_by 是当前用户。
这对数据存储的要求较低(即财务成本较低):
查询以获取所有内容,即:
Thing.query(Thing.belongs_to == some_thing.key)并遍历结果,存储可见的以及不可见但由当前用户制作的结果?查询获取可见的,即:
Thing.query(Thing.belongs_to == some_thing.key, Thing.visible == "True"),单独查询获取当前用户不可见的,即:Thing.query(Thing.belongs_to == some_thing.key, Thing.visible == "False", Thing.made_by = current_user)?
数字 1. 会得到许多不需要的结果,例如其他用户不可见的Things - 我认为这是对数据存储的多次读取? 2. 是两个完整的查询,这也可能是不必要的繁重,对吧?我仍在尝试找出与数据库的何种交互会导致何种成本。
我在必要时使用 ndb、tasklet 和 memcache,以防万一。
【问题讨论】:
-
为什么说不能用OR?
标签: python google-app-engine app-engine-ndb