Python 运行dev_appserver.py时如何访问远程数据存储?

Python 运行dev_appserver.py时如何访问远程数据存储?,python,google-app-engine,Python,Google App Engine,我正在尝试运行一个本地主机web服务器,该服务器使用remote\u api\u stub方法ConfigureRemoteApiForOAuth对远程数据存储进行远程api访问 我一直在使用以下谷歌文档作为参考,但发现它相当稀少: 我相信我错过了认证,但找不到具体的资源来指导我。给定下面的代码示例,在运行dev_appserver.py时访问远程数据存储的最简单方法是什么 import webapp2 from google.appengine.ext import ndb from goo

我正在尝试运行一个本地主机web服务器,该服务器使用
remote\u api\u stub
方法
ConfigureRemoteApiForOAuth
对远程数据存储进行远程api访问

我一直在使用以下谷歌文档作为参考,但发现它相当稀少:

我相信我错过了认证,但找不到具体的资源来指导我。给定下面的代码示例,在运行
dev_appserver.py
时访问远程数据存储的最简单方法是什么

import webapp2
from google.appengine.ext import ndb
from google.appengine.ext.remote_api import remote_api_stub


class Topic(ndb.Model):
    created_by = ndb.StringProperty()
    subject = ndb.StringProperty()

    @classmethod
    def query_by_creator(cls, creator):
        return cls.query(Topic.created_by == creator)


class MainPage(webapp2.RequestHandler):
    def get(self):
        remote_api_stub.ConfigureRemoteApiForOAuth(
                '#####.appspot.com',
                '/_ah/remote_api'
        )
        topics = Topic.query_by_creator('bill')
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('<html><body>')
        self.response.out.write('<h1>TOPIC SUBJECTS:<h1>')
        for topic in topics.fetch(10):
            self.response.out.write('<h3>' + topic.subject + '<h3>')
        self.response.out.write('</body></html>')

app = webapp2.WSGIApplication([
    ('/', MainPage)
], debug=True)
导入webapp2
从google.appengine.ext导入ndb
从google.appengine.ext.remote\u api导入remote\u api\u存根
课程主题(ndb.Model):
创建人=ndb.StringProperty()
subject=ndb.StringProperty()
@类方法
def查询由创建者(cls、创建者)执行:
返回cls.query(Topic.created_by==creator)
类主页(webapp2.RequestHandler):
def get(自我):
远程api存根。配置RemoteApiforOAuth(
“appspot.com”,
“/\u ah/remote\u api”
)
topics=主题。由创建者(“账单”)查询
self.response.headers['Content-Type']='text/plain'
self.response.out.write(“”)
self.response.out.write('主题主题:')
对于topics.fetch中的主题(10):
self.response.out.write(“”+topic.subject+“”)
self.response.out.write(“”)
app=webapp2.WSGIApplication([
(“/”,主页)
],debug=True)

这个get被问了很多问题,只是因为你不能在SDK之外使用应用程序引擎库。然而,在appenginesdk中也有一种更简单的方法可以实现这一点

我会用
gcloud
来做这个。以下是如何设置它:

如果您想在appengine环境内外与google云存储服务交互,可以使用Gcloud()实现

您的应用程序需要一个服务帐户,还需要下载JSON凭据文件。您可以在app engine控制台的
身份验证
选项卡下执行此操作。创建它,然后下载它。称之为
client\u secret.json
或其他什么

有了这些,一旦您使用pip为gcloud安装了合适的软件包,您就可以进行查询和写入数据

下面是一个验证自己使用库的示例:

from gcloud import datastore

# the location of the JSON file on your local machine
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/location/client_secret.json"


# project ID from the Developers Console
projectID = "THE_ID_OF_YOUR_PROJECT"

os.environ["GCLOUD_TESTS_PROJECT_ID"] = projectID
os.environ["GCLOUD_TESTS_DATASET_ID"] = projectID
client = datastore.Client(dataset_id=projectID)
完成后,您可以进行如下查询:

query = client.query(kind='Model').fetch()

这其实非常简单。任何人,我都会这么做!干杯。

谢谢你指出这一点!我一直在摆弄node.js的gcloud,但没有意识到他们也有一个python版本。@Josh哈哈,是的,他们有。没问题@Kris和Josh我正试图使用gcloud连接到远程数据存储,并遵循了此处发布的建议,但我遇到了一些我在此处描述的问题:你们中有谁会碰巧知道我为什么无法让它工作?谢谢