Joh*_*dol 69

如果您正在谈论实时数据存储,请打开应用程序的仪表板(登录appengine)然后数据存储 - > dataviewer,选择要删除的表的所有行并点击删除按钮(您必须为你的所有表格做这个).您可以通过remote_api以编程方式执行相同操作(但我从未使用过它).

如果您正在讨论开发数据存储区,则只需删除以下文件:"./ WWE-INF/appengine-Generated/local_db.bin".下次运行开发服务器时,将再次为您生成该文件,并且您将拥有一个明确的数据库.

确保事后清理项目.

这是您开始使用Google Application Engine时派上用场的小问题之一.您会发现自己将对象持久存储到数据存储区中,然后更改可持久化实体的JDO对象模型,最终使用过时的数据,这会使您的应用程序在整个地方崩溃.

  • dev_appserver.py有一个-c参数可以从开发数据存储中删除. (16认同)
  • Windows中的路径在哪里? (3认同)
  • 谢谢@John:MAC OSX中的确切路径在哪里? (2认同)
  • @ShaneBest窗口中的路径类似于./target/yourappid-1.0-SNAPSHOT/WEB-INF/appengine-generated/local_db.bin (2认同)

小智 58

最好的方法是Nick建议的远程API方法,他是GoogleApp 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
Run Code Online (Sandbox Code Playgroud)

更新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备份数据存储.

  • 实际上,你不需要获取.只需db.delete(Entry.all())就可以了. (17认同)
  • 您需要在500个实体集中执行此操作,否则您将获得:BadRequestError:在一次调用中无法删除超过500个实体 (4认同)
  • 调用Entry.all()时至少添加'keys_only = True'.如果您不需要检查数据,则无需获取整个条目.否则你只是在浪费计算周期. (2认同)

sys*_*out 27

在数据存储上处理批量删除的最快速有效的方法是使用最新的Google I/O上公布的新映射器API.

如果您选择的语言是Python,则只需在mapreduce.yaml文件中注册mapper 并定义如下函数:

from mapreduce import operation as op
def process(entity):
 yield op.db.Delete(entity)
Run Code Online (Sandbox Code Playgroud)

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());
}
Run Code Online (Sandbox Code Playgroud)

编辑:
自SDK 1.3.8以来,为此目的有一个数据存储管理功能


Ste*_*oth 26

您可以在运行服务器时清除开发服务器数据存储:

/path/to/dev_appserver.py --clear_datastore=yes myapp

您也可以缩写--clear_datastore使用-c.

  • 不确定它是否是最近的事情,但实际的语法现在是`/path/to/google_appengine/dev_appserver.py-clear_datastore yes myappname /`(注意'是') (5认同)

Nic*_*son 15

如果您有大量数据,则需要使用脚本将其删除.但是,您可以使用remote_api以直接的方式从客户端清除数据存储区.


小智 11

在这里:转到数据存储区管理员,然后选择要删除的实体类型,然后单击"删除".Mapreduce将负责删除!


svp*_*ino 9

您可以使用多种方法从App Engine的数据存储区中删除条目:

在此输入图像描述

  1. 首先,想一想你是否真的需要删除条目.这很昂贵,不去除它们可能更便宜.

  2. 您可以使用数据存储管理员手动删除所有条目.

  3. 您可以使用远程API并以交互方式删除条目.

  4. 您可以使用几行代码以编程方式删除条目.

  5. 您可以使用任务队列和游标批量删除它们.

  6. 或者你可以使用Mapreduce来获得更强大和更漂亮的东西.

以下博客文章中解释了这些方法中的每一种:http: //www.shiftedup.com/2015/03/28/how-to-bulk-delete-entries-in-app-engine-datastore

希望能帮助到你!


dfi*_*ter 6

执行此操作的零设置方法是向管理服务发送执行任意代码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())'}))
Run Code Online (Sandbox Code Playgroud)