需要在测试期间上传测试数据之前擦除 Datastore 命名空间。将 Cloud Datastore API 与 Python3 结合使用。
我在 Python3 中将 Datastore 与 App Engine 一起使用。出于测试目的,我使用 Cloud Datastore API 编写了一个脚本,将多个不同类型的实体上传到数据存储区。由于这是一个小项目,目前只有4种,每种只有2-3个实体。
我想将一个脚本添加到我的管道中,以清除 Datastore 中将包含我的测试数据的特定命名空间。我希望它在上传数据和测试之前运行,以便测试每次都可以从头开始。我正在使用云构建器将实体上传到数据存储并在部署到应用程序引擎之前在 docker 容器中运行我的测试。
目前我能找到的唯一解决方案是使用 Dataflow(我认为这完全是矫枉过正),或者使用它的键单独删除每个实体。如果可能,我更愿意擦除整个命名空间。
如果有人对如何执行此操作有任何建议或建议,请告诉我!
您可以在 python 中编写一个脚本来删除特定命名空间中的所有种类。假设您事先知道种类的名称。
from google.appengine.ext import ndb
from google.appengine.api import namespace_manager
namespace = "PROVIDE_NAMESPACE_HERE"
kind_list = [kind_1,kind_2,kind_3,kind_4]
namespace_manager.set_namespace(namespace) # will set to the namespace provided
for a_kind in kind_list:
# will fetch keys of all objects in that kind
kind_keys = a_kind.gql("").fetch(keys_only = True)
# will delete all the keys at once
ndb.delete_multi(kind_keys)
从特定命名空间中删除所有种类后,您的命名空间将在 Cloud Datastore 中可见约 24 小时,如果之后它不包含任何种类,它将被自动删除。
希望这能回答你的问题!!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句