85

对于 Google App Engine 的 Java 实现,似乎没有 Python App Engine 的 _ah/admin 等效项。

是否有手动方式可以浏览数据存储?我的机器上的文件在哪里?(我在 OS X 上使用带有 Eclipse 的 App Engine 插件)。

4

7 回答 7

111

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html:“终于,开发应用服务器有一个数据查看器。在本地启动您的应用并指向您的浏览器到* 来检查它。”http://localhost:8888/_ah/admin http://localhost:8000/datastore

* 自1.7.7起

于 2009-07-14T13:33:38.357 回答
40

目前没有用于 Java SDK 的数据存储查看器 - 下一个 SDK 版本中应该会提供。与此同时,最好的办法是编写自己的管理界面,使用数据存储查看代码 - 或等待下一个 SDK 版本。

Java App Engine 现在有一个本地数据存储查看器,可在http://localhost:8080/_ah/admin.

于 2009-07-09T12:46:12.047 回答
6

我的 Windows+Eclipse 环境在 \war\WEB-INF\appengine-generated\local_db.bin 上有本地数据存储

据我了解,它使用名为“协议缓冲区”的内部格式。我没有外部工具来以人类可读的格式呈现文件。

我正在使用这样的简单“查看器”代码:

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException 
{

    resp.setContentType("text/plain");

    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    final Query query = new Query("Table/Entity Name");
    //query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.DESCENDING);

    for (final Entity entity : datastore.prepare(query).asIterable()) {
        resp.getWriter().println(entity.getKey().toString());

        final Map<String, Object> properties = entity.getProperties();
        final String[] propertyNames = properties.keySet().toArray(
            new String[properties.size()]);
        for(final String propertyName : propertyNames) {
            resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
        }
    }
}
于 2009-07-09T10:10:12.717 回答
2

在最新版本的 SDK ( 1.7.6+ ) 中,开发服务器的管理部分随它一起改变了它的位置

分析服务器输出日志,我们可以看到它可以在以下位置访问:

http://localhost:8000

数据存储查看器:

http://localhost:8000/datastore

看起来很整洁 - 根据谷歌的新设计指南。

于 2013-04-14T17:45:41.467 回答
1

因为 Google App Engines Datastore 查看器不支持显示引用实体的集合,所以我修改了 Paul 的版本以显示所有后代实体:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String entityParam = req.getParameter("e");

    resp.setContentType("text/plain");
    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    // Original query
    final Query queryOrig = new Query(entityParam);
    queryOrig.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);

    for (final Entity entityOrig : datastore.prepare(queryOrig).asIterable()) {

        // Query for this entity and all its descendant entities and collections
        final Query query = new Query();
        query.setAncestor(entityOrig.getKey());
        query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);

        for (final Entity entity : datastore.prepare(query).asIterable()) {
            resp.getWriter().println(entity.getKey().toString());

            // Print properties
            final Map<String, Object> properties = entity.getProperties();
            final String[] propertyNames = properties.keySet().toArray(new String[properties.size()]);
            for(final String propertyName : propertyNames) {
                resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
            }
        }
    }
}

应该注意的是,空集合/引用的实体不会显示任何内容。

于 2012-08-20T19:08:15.850 回答
1

\war\WEB-INF\appengine-generated\local_db.bin使用文本编辑器打开文件,例如 Notepad++。

数据被打乱了,但至少你可以阅读它,你可以复制来提取它。

于 2013-11-15T21:49:42.393 回答
0

对我来说,解决方法是使用以下gcloud命令进行登录

gcloud auth application-default login
于 2018-12-25T04:20:18.193 回答