GAE NDB数据存储区新功能:从其他GAE应用程序访问数据存储区实体

时间:2016-06-02 03:25:53

标签: python google-app-engine google-cloud-datastore

阅读GAE NDB数据存储区的新文档: https://cloud.google.com/appengine/docs/python/ndb/modelclass#class_methods

get_by_id(id, parent=None, app=None, namespace=None, **ctx_options)
     

按ID返回实体。这实际上只是Key(cls, id).get()的缩写。

     

参数

     

id字符串或整数键ID。 parent模型的父键   得到。

     

app(关键字arg)应用ID。如果未指定,则获取当前数据   应用

     

namespace(关键字arg)命名空间。如果未指定,则获取数据   默认命名空间。

     

**ctx_options上下文选项返回模型实例,如果未找到,则返回None。

我发现了这个新的app参数。这是我很久以前所需要的!!!!! 我只是试图访问app" xxxxxdev"的数据存储区。来自app" xxxxxglobal"但我得到这个错误:

File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1373, in check_rpc_success
    raise _ToDatastoreError(err)
BadRequestError: app s~xxxxxglobal cannot access app xxxxxxdev's data

我在此链接中添加了帐户服务xxxxxdev@appspot.gserviceaccount.com和xxxxxglobal@appspot.gserviceaccount.com作为彼此的管理员: https://console.cloud.google.com/iam-admin/iam/

但我仍然遇到了这个问题。

任何人都可以帮助我吗?我需要知道在控制面板中我可以向App Engine中的其他应用授予数据存储访问权限。

1 个答案:

答案 0 :(得分:1)

目前,ndb不使用Cloud Datastore API,并且在其正常操作模式下无法连接到另一个应用程序的数据存储区 - 它本地连接到应用程序的数据存储区,代码为继续前进。

但是,您可以使用remote api将ndb连接到开发环境中不同应用程序的数据存储区。

目前[{3}}中有一个开放的功能请求,可以从单个应用访问多个数据存储。请随意发布针对ndb的功能请求,尽管从Public Issue Tracker for App Engine开始,这已经是正在处理的内容:

 current_app_id = os.environ.get('APPLICATION_ID', None)
  if current_app_id and current_app_id != app_id:
    # TODO(pcostello): We should support this so users can connect to different
    # applications.
    raise ValueError('Cannot create a Cloud Datastore context that connects '
                     'to an application (%s) that differs from the application '
                     'already connected to (%s).' % (app_id, current_app_id))
  os.environ['APPLICATION_ID'] = app_id