好吧,我正在使用 App Engine (Java) 进行开发,经过多次尝试和部署,我需要重置数据存储区。我添加了很多随机数据来测试性能,而且实体变化很大,所以我需要删除所有:数据、表、索引。
我怎样才能做到这一点?
好吧,我正在使用 App Engine (Java) 进行开发,经过多次尝试和部署,我需要重置数据存储区。我添加了很多随机数据来测试性能,而且实体变化很大,所以我需要删除所有:数据、表、索引。
我怎样才能做到这一点?
很抱歉唤醒这个线程,但以防万一我想为像我这样的菜鸟添加一个提示(最终在谷歌文档中找到了答案):
如果您想一次性重置本地数据存储(例如在使用 eclipse 开发时),请关闭服务器,在您的项目中找到文件“ local_db.bin ”(应该在 WEB-INF/appengine-generated/ 目录中) ),然后将其删除。
使用java可以正常工作,还没有尝试使用python。
++
清除开发服务器数据存储
开发 Web 服务器使用本地版本的数据存储来测试您的应用程序,使用临时文件。只要临时文件存在,数据就会一直存在,除非您要求,否则 Web 服务器不会重置这些文件。
如果您希望开发服务器在启动之前擦除其数据存储,请在启动服务器时使用 --clear_datastore 选项:
dev_appserver.py --clear_datastore helloworld/
SQL 中没有与 DROP TABLE 或 TRUNCATE TABLE 等效的内置命令。您只需要在您的应用程序中创建一个“删除所有内容”页面,然后通过脚本重复调用该页面。在该页面中,您希望删除尽可能多的实体,但您仍然可以合理地期望在请求超时之前完成。确切的代码取决于您使用的是 JDO/JPA 还是低级 API。(低级 API 会更快,因为您可以使用批处理操作。)
这个之前的 SO 问题几乎相同,仅适用于 Python
只需执行一个不带过滤器的查询来获取所有实体,然后将它们一一删除。
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());
}
}
很抱歉这么晚了,但我只是想自己做同样的事情......
我登录到我的帐户 (appengine.google.com) 并找到了通过管理实用程序 (datastore/dataviewer) 浏览数据存储的选项...允许创建/更新/删除。
删除应用程序的全部(或部分)数据现在是管理控制台的一部分
要启用此功能,只需在 app.yaml 文件中启用以下内置功能:
builtins:
- datastore_admin: on
将这些行添加到 app.yaml 会启用应用管理控制台中的“Datastore Admin”页面
根据 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);
脱离了 java dev 的上下文,但是由于这里的文档很少,所以这里是如何在 go 中进行的:
keys, _ := datastore.NewQuery("").KeysOnly().GetAll(c, nil)
datastore.DeleteMulti(c, keys)
如果您在项目中使用 maven,则只需执行“mvn clean install”即可。这当然会在本地重置数据存储。
在我的情况下(使用 eclipse 插件和播放框架)我不得不停止应用程序,删除文件 /apps/crud-gae/tmp/datastore 然后重新启动应用程序
它对我有用...当然在本地工作...
在本地工作时,在 Windows 7 上,该文件为 user\UserName\AppData\Local\Temp\dev_appserver.datastore
我正在使用带有 Google Coursebuilder 的应用程序引擎,并且必须使用此命令来清除数据存储区:
python dev_appserver.py --clear_datastore /path/to/app
添加另一个有用的信息:如果使用 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.