部署后如何从 Google App Engine Datastore 获取数据

How can i get data from Google App engine Datastore after deploy

我使用应用引擎和 gwt 制作了一个网络应用程序。在这个应用程序中,我还使用了 google 数据存储。在我部署我的应用程序之前,我可以访问我的数据存储。我存储了一些数据,然后我可以在我的浏览器上显示它们。我刚刚在 App Engine 中部署了我的应用程序,我不能再显示它们了……更具体地说,我有一个菜单和一个 table。当我从菜单中选择一些东西时,我会创建一个 rpc 以从我的数据存储中获取正确的数据,然后我将它们显示在我网页的 table 上。在我部署我的应用程序之前,它工作正常。现在,当我转到 运行 宁在云上的网页并单击菜单上的某些内容时,我得到一个空的 table.How 我可以解决这个问题吗?我读了一些关于凭证的内容,但它不是很有帮助。有人可以解释我应该怎么做吗?当我 运行 我的控制台中的程序运行时。 这是我用来获取数据的代码。

DatastoreService ds= DatastoreServiceFactory.getDatastoreService();

    Query q=new Query(s);
    PreparedQuery pq = ds.prepare(q);
    for (Entity entity : pq.asIterable()) {

        table.add(entity.getProperty("Name);
    }return table;

当您开发代码时,您很可能使用本地数据存储,部署后您现在使用链接到您的项目的实际数据存储。(如果我没有正确理解您的问题,您希望您的本地数据部署后出现,这不会发生,因为本地数据存储未与实际数据存储同步。)要上传或下载初始数据,您可以在服务器端创建一个 script/handler ,它将从 csv 读取或更好的方式是 enable remote api

Remote api 基本上是一种基于 Web 的数据存储访问机制。您现在可以使用 python 脚本批量插入数据,甚至可以在 java 中编写代码,这些代码可以 运行 在本地机器上本地运行,但基本上会影响云中的数据存储(通过内部网络服务) .

启用远程api

<servlet>
    <display-name>Remote API Servlet</display-name>
    <servlet-name>RemoteApiServlet</servlet-name>
    <servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>RemoteApiServlet</servlet-name>
    <url-pattern>/remote_api</url-pattern>
</servlet-mapping>

在 python 中,您可以像这样编写批量插入脚本

sys.path.append('/usr/local/google_appengine/')
sys.path.append('/usr/local/google_appengine/lib')
sys.path.append('/usr/local/google_appengine/lib/yaml/lib/')
sys.path.append(
    os.path.abspath(
        os.path.dirname(
            os.path.realpath(__file__))))
if 'google' in sys.modules:
    del sys.modules['google']

from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.ext import ndb
from db import Post
import csv



 app_id = 'blah'
 host = '%s.appspot.com' % app_id
 remote_api_stub.ConfigureRemoteApiForOAuth(host, '/_ah/remote_api', True)

在上面一行之后

print MyRemoteEntity.query().count()

java阅读this

您在本地创建的数据不会部署到 GAE。如果您在本地添加的内容不多 - 只需按照您在本地执行的方式在已部署版本上重新创建它,并在开发时牢记这一事实(不会部署本地数据)。如果您在本地创建了大量数据 - 您可能需要按照此处的建议使用远程 api 同步两者。