首页 文章

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

提问于
浏览
9

阅读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)app的ID . 如果未指定,则获取当前应用的数据 . namespace(关键字arg)命名空间 . 如果未指定,则获取默认命名空间的数据 . ** ctx_options上下文选项返回模型实例,如果未找到则返回None .

我发现了这个新的 app 参数 . 这是我很久以前所需要的!!!!!我只是尝试从app "xxxxxglobal"访问app "xxxxxdev"的数据存储区但是我收到此错误:

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 回答

  • 1

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

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

    目前[Public Issue Tracker for App Engine中有一个开放的功能请求,可以从一个应用程序访问多个数据存储区 . 随意发布ndb的功能请求,虽然从the following comments in the source看来这已经是正在处理的东西:

    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
    

相关问题