gpt4 book ai didi

python - 如何为所有 NDB 数据存储条目分配默认值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:20 24 4
gpt4 key购买 nike

我必须向我现有的 NDB 类添加一个新属性:

class AppList(ndb.Model):
...
ignore = ndb.BooleanProperty(default=False) # new property

然后我会像下面这样使用它:

entries = AppList.query()
entries = entries.filter(AppList.counter > 5)
entries = entries.filter(AppList.ignore == False)
entries = entries.fetch()

我不能使用 AppList.ignore != True 来捕获早期添加的记录(没有 ignore 属性),所以我必须分配 False 我的 AppList 实体中的所有记录。最有效的方法是什么?目前该实体包含大约 4'000 个条目。

更新。我决定使用以下丑陋的代码(没有设法应用 cursors),它作为 cron 作业运行。但是我不是每次都更新相同的 100 条记录吗?

entities = AppList.query()
# entities = entities.filter(AppList.ignore != False)
entities = entities.fetch(100)
while entities:
for entity in entities:
entity.ignore = False
entity.put()
entities = AppList.query()
# entities = entities.filter(AppList.ignore != False)
entities = entities.fetch(100)

最佳答案

不要忘记在这些情况下使用了一个 MapReduce 库。但我认为最好的方法是结合使用所有这些建议。

现在,您需要 get() 和 put() 4000 个实体,问题是如何降低此操作的“成本”。

我只是想知道您的 bool(entity.ignore) 返回了什么。如果 missing 属性返回 False,您可以调整代码以考虑它 False 并推迟操作。如果您出于其他原因将 put() 属性 ignore 写入 False,这要归功于默认参数。因此,对于其余实体,可以运行这样的脚本(通过 remote_api):

def iter_entities(cursor=None):
entries = AppList.query()
res, cur, more = entries.fetch_page(100, start_cursor=cursor)
put_queue = [ent for ent in res if not hasattr(ent, 'ignore')]
# put_queue = []
# for ent in res:
# if not hasattr(ent, 'ignore'):
# put_queue.append(ent)
ndb.put_multi(put_queue)
if more:
iter_entities(cur) # a taskqueue is better

关于python - 如何为所有 NDB 数据存储条目分配默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19845425/

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