部分祖先在从AppEngine数据存储区删除之前提取

时间:2011-11-24 12:58:20

标签: python google-app-engine model datastore

我想在事务中从AppEngine数据存储中删除一堆对象:

def F():
  items_to_delete = []
  for item in db.Query().ancestor(...):
    if item.aaa ... item.bbb:
      items_to_delete.append(item)
  db.delete(items_to_delete)
db.run_in_transaction(F)

是否可以仅提取项目的几个字段(aaabbb)?这样的获取会对性能产生积极影响吗?

2 个答案:

答案 0 :(得分:3)

不可能只获取几个字段;即,您将始终使用其所有字段(或仅实体键)获取整个实体。来自App Engine GQL reference docs

The GQL syntax can be summarized as follows:   
    SELECT [* | __key__]
        [FROM <kind>]]
        [WHERE <condition> [AND <condition> ...]]
        [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] ...]]
        [LIMIT [<offset>,]<count>]
        [OFFSET <offset>]

  

GQL查询返回零个或多个实体或所请求类型的键。每个GQL查询始终以SELECT *SELECT __key__开头。 (GQL查询无法执行类似SQL的“连接”查询。)提示:SELECT __key__查询比SELECT *查询更快,成本更低。

答案 1 :(得分:0)

查看由Guido自己撰写的NDB tutorial低头并说“我不值得”x 3 :)。他在查询中使用AND OR并使用偏移量获取一些字段(这可以回答您的问题)。虽然仍然是实验性的,所以请谨慎使用,直到它不在预览范围内。