29

好吧,我正在使用 App Engine (Java) 进行开发,经过多次尝试和部署,我需要重置数据存储区。我添加了很多随机数据来测试性能,而且实体变化很大,所以我需要删除所有:数据、表、索引。

我怎样才能做到这一点?

4

14 回答 14

30

很抱歉唤醒这个线程,但以防万一我想为像我这样的菜鸟添加一个提示(最终在谷歌文档中找到了答案):

如果您想一次性重置本地数据存储(例如在使用 eclipse 开发时),请关闭服务器,在您的项目中找到文件“ local_db.bin ”(应该在 WEB-INF/appengine-generated/ 目录中) ),然后将其删除。

使用java可以正常工作,还没有尝试使用python。

++

于 2010-08-18T21:39:20.113 回答
17

清除开发服务器数据存储

开发 Web 服务器使用本地版本的数据存储来测试您的应用程序,使用临时文件。只要临时文件存在,数据就会一直存在,除非您要求,否则 Web 服务器不会重置这些文件。

如果您希望开发服务器在启动之前擦除其数据存储,请在启动服务器时使用 --clear_datastore 选项:

dev_appserver.py --clear_datastore helloworld/

使用数据存储

于 2010-08-27T04:50:19.993 回答
16

SQL 中没有与 DROP TABLE 或 TRUNCATE TABLE 等效的内置命令。您只需要在您的应用程序中创建一个“删除所有内容”页面,然后通过脚本重复调用该页面。在该页面中,您希望删除尽可能多的实体,但您仍然可以合理地期望在请求超时之前完成。确切的代码取决于您使用的是 JDO/JPA 还是低级 API。(低级 API 会更快,因为您可以使用批处理操作。)

这个之前的 SO 问题几乎相同,仅适用于 Python

于 2009-07-20T17:42:38.260 回答
9

只需执行一个不带过滤器的查询来获取所有实体,然后将它们一一删除。

import javax.servlet.http.*;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;

public class MyServlet extends HttpServlet {
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        DatastoreService datastore = 
                    DatastoreServiceFactory.getDatastoreService();

    Query mydeleteq = new Query();
    PreparedQuery pq = datastore.prepare(mydeleteq);
    for (Entity result : pq.asIterable()) {
        datastore.delete(result.getKey());      
    }   
}
于 2011-06-20T01:33:13.657 回答
4

很抱歉这么晚了,但我只是想自己做同样的事情......

我登录到我的帐户 (appengine.google.com) 并找到了通过管理实用程序 (datastore/dataviewer) 浏览数据存储的选项...允许创建/更新/删除。

于 2009-09-07T22:25:44.457 回答
2

删除应用程序的全部(或部分)数据现在是管理控制台的一部分

要启用此功能,只需在 app.yaml 文件中启用以下内置功能:

builtins:
- datastore_admin: on

将这些行添加到 app.yaml 会启用应用管理控制台中的“Datastore Admin”页面

于 2010-01-24T21:49:18.727 回答
2

根据 GAE 文档,您可以在 JDO 中删除多个对象,使用对象集合调用 PersistenceManager 的 deletePersistentAll(...) 方法。

PersistenceManager pm = PMF.get().getPersistenceManager();

Query query = pm.newQuery("select from " + Your.class);

List<Your> objs = (List<Your>) query.execute();

pm.deletePersistentAll(objs);
于 2010-04-20T18:26:08.120 回答
1

脱离了 java dev 的上下文,但是由于这里的文档很少,所以这里是如何在 go 中进行的:

keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)
于 2014-10-01T11:02:07.590 回答
1

如果您在项目中使用 maven,则只需执行“mvn clean install”即可。这当然会在本地重置数据存储。

于 2015-06-02T14:11:28.293 回答
1

打开http://localhost:8000/datastore可以删除本地数据

于 2016-07-05T17:48:11.150 回答
0

在我的情况下(使用 eclipse 插件和播放框架)我不得不停止应用程序,删除文件 /apps/crud-gae/tmp/datastore 然后重新启动应用程序

它对我有用...当然在本地工作...

于 2011-01-12T06:20:17.633 回答
0

在本地工作时,在 Windows 7 上,该文件为 user\UserName\AppData\Local\Temp\dev_appserver.datastore

于 2012-01-14T13:05:02.623 回答
0

我正在使用带有 Google Coursebuilder 的应用程序引擎,并且必须使用此命令来清除数据存储区:

python dev_appserver.py --clear_datastore /path/to/app
于 2013-01-16T21:16:04.447 回答
0

添加另一个有用的信息:如果使用 Eclipse 并且您想清除本地数据存储,请查找此控制台消息:

INFO: Local Datastore initialized: 
Storage: C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin

它仅在您执行强制数据存储初始化操作后才会显示,例如,这可能会刷新管理页面上的实体列表。然后停止您的服务器并删除该文件,当您重新启动时,您应该会看到:

INFO: The backing store, C:\Users\eric\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\appname\WEB-INF\appengine-generated\local_db.bin, does not exist. It will be created.
于 2018-02-15T00:31:39.413 回答