我想在事务中从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)
是否可以仅提取项目的几个字段(aaa
和bbb
)?这样的获取会对性能产生积极影响吗?
答案 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并使用偏移量获取一些字段(这可以回答您的问题)。虽然仍然是实验性的,所以请谨慎使用,直到它不在预览范围内。