gpt4 book ai didi

google-app-engine - Google App Engine - 删除直到 count() <= 0

转载 作者:行者123 更新时间:2023-12-04 14:48:47 24 4
gpt4 key购买 nike

这两段代码有什么区别?

query=Location.all(keys_only=True)
while query.count()>0:
db.delete(query.fetch(5))

# --

while True:
query=Location.all(keys_only=True)
if not query.count():
break
db.delete(query.fetch(5))

它们都有效。

最佳答案

从逻辑上讲,这两段代码执行完全相同的事情 - 它们删除每个 Location 实体,一次删除 5 个。

第一段代码在风格和(稍微)性能方面都更好。 (查询本身不需要在每个循环中重建)。

但是,这段代码并没有达到它应有的效率。它有几个问题:

  1. 您使用了 count() 但并不需要。简单地获取实体,然后测试结果以查看是否有任何实体会更有效。

  2. 您与数据存储的往返次数超出了您的需要。每个 count()fetch()delete() 调用都必须进入数据存储并返回。这些往返很慢,所以你应该尽量减少它们。您可以通过在每个循环中获取更多实体来做到这一点。

例子:

q = Location.all(keys_only=True)
results = q.fetch(500)
while results:
db.delete(results)
results = q.fetch(500)

编辑:看看下面 Nick 的回答 - 他解释了为什么使用查询游标可以进一步提高这段代码的性能。

关于google-app-engine - Google App Engine - 删除直到 count() <= 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com