有谁知道如何删除Google App Engine中的所有数据存储区?
如果您正在谈论实时数据存储,请打开应用程序的仪表板(登录appengine)然后数据存储 - > dataviewer,选择要删除的表的所有行并点击删除按钮(您必须为你的所有表格做这个).您可以通过remote_api以编程方式执行相同操作(但我从未使用过它).
如果您正在讨论开发数据存储区,则只需删除以下文件:"./ WWE-INF/appengine-Generated/local_db.bin".下次运行开发服务器时,将再次为您生成该文件,并且您将拥有一个明确的数据库.
确保事后清理项目.
这是您开始使用Google Application Engine时派上用场的小问题之一.您会发现自己将对象持久存储到数据存储区中,然后更改可持久化实体的JDO对象模型,最终使用过时的数据,这会使您的应用程序在整个地方崩溃.
最好的方法是Nick建议的远程API方法,他是Google的App Engine工程师,所以相信他.
这并不困难,最新的1.2.5 SDK提供了现成的remote_shell_api.py.所以去下载新的SDK.然后按照步骤操作:
在命令行中连接远程服务器:remote_shell_api.py yourapp /remote_api
shell将询问您的登录信息,如果获得授权,将为您创建一个Python shell.您需要在app.yaml中为/ remote_api设置url处理程序
获取您要删除的实体,代码如下所示:
from models import Entry query = Entry.all(keys_only=True) entries =query.fetch(1000) db.delete(entries) \# This could bulk delete 1000 entities a time
更新2013-10-28:
remote_shell_api.py
根据文档remote_api_shell.py
,已被替换为,您应该连接.remote_api_shell.py -s your_app_id.appspot.com
有一个新的实验性功能Datastore Admin,在应用设置中启用后,您可以批量删除以及通过web ui备份数据存储.
在数据存储上处理批量删除的最快速有效的方法是使用最新的Google I/O上公布的新映射器API.
如果您选择的语言是Python,则只需在mapreduce.yaml文件中注册mapper 并定义如下函数:
from mapreduce import operation as op def process(entity): yield op.db.Delete(entity)
在Java上你应该看看这篇文章,它建议这样的函数:
@Override public void map(Key key, Entity value, Context context) { log.info("Adding key to deletion pool: " + key); DatastoreMutationPool mutationPool = this.getAppEngineContext(context) .getMutationPool(); mutationPool.delete(value.getKey()); }
编辑:
自SDK 1.3.8以来,为此目的有一个数据存储管理功能
您可以在运行服务器时清除开发服务器数据存储:
/path/to/dev_appserver.py --clear_datastore=yes myapp
您也可以缩写--clear_datastore
使用-c
.
如果您有大量数据,则需要使用脚本将其删除.但是,您可以使用remote_api以直接的方式从客户端清除数据存储区.
在这里:转到数据存储区管理员,然后选择要删除的实体类型,然后单击"删除".Mapreduce将负责删除!
您可以使用多种方法从App Engine的数据存储区中删除条目:
首先,想一想你是否真的需要删除条目.这很昂贵,不去除它们可能更便宜.
您可以使用数据存储管理员手动删除所有条目.
您可以使用远程API并以交互方式删除条目.
您可以使用几行代码以编程方式删除条目.
您可以使用任务队列和游标批量删除它们.
或者你可以使用Mapreduce来获得更强大和更漂亮的东西.
以下博客文章中解释了这些方法中的每一种:http: //www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore
希望能帮助到你!
执行此操作的零设置方法是向管理服务发送执行任意代码HTTP请求,您的运行应用程序已经自动执行:
import urllib import urllib2 urllib2.urlopen('http://localhost:8080/_ah/admin/interactive/execute', data = urllib.urlencode({'code' : 'from google.appengine.ext import db\n' + 'db.delete(db.Query())'}))