从Google应用引擎查询现有的Google Cloud Datastore

时间:2016-12-07 19:22:47

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

我在Google Cloud Datastore中拥有一个约50,000行的实体,而不是GAE。我正在使用GAE开始开发,并希望查询此现有数据存储区而无需将其导入GAE。我一直无法找到连接现有数据存储区的方法。

从Hello World和其他指南中改变的基本代码我试图以POC的形式工作。

import webapp2
import json
import time
from google.appengine.ext import ndb

class Product(ndb.Model):
type = ndb.StringProperty()

@classmethod
def query_product(cls):
    return ndb.gql("SELECT * FROM Product where name >= :a LIMIT 5 ")

class MainPage(webapp2.RequestHandler):
def get(self):
    self.response.headers['Content-Type'] = 'text/plain'

    query = Product.query_product()

    self.response.write(query)


app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)

返回的错误是

TypeError: Model Product has no property named 'name'

很明显,它试图将GAE数据存储区与产品类型一起使用,而不是现有的已定义产品的数据存储区,但我无法找到如何建立连接。

3 个答案:

答案 0 :(得分:1)

只有一个Google Cloud数据存储区。 App Engine没有自己的数据存储 - 它与同一个Google Cloud数据存储区配合使用。

数据存储区中的所有实体都存储在特定的项目中。如果您尝试从其他项目访问数据,则无法通过特殊身份验证就无法看到它。

答案 1 :(得分:0)

当你说would like to query this existing datastore without having to import it to GAE时,我不太确定你想要完成的是什么。我猜你有一个带有50k行数据存储区的项目A,你正在启动项目B.你想要从项目B访问项目数据存储区。如果是这种情况,并且你正在尝试从其他项目访问数据存储区,然后提及this previous answerremote api可以帮助您。

答案 2 :(得分:0)

以下是工作代码。我做这篇原创帖子的时候非常接近,但我没有收到任何数据的原因是因为我在本地运行我的应用程序。一旦我实际将代码部署到App Engine,它从数据存储区中提取就没问题了。

import webapp2
import json
import time
from google.appengine.datastore.datastore_query import Cursor
from google.appengine.ext import ndb



class Product(ndb.Model):
    name = ndb.StringProperty()


class MainPage(webapp2.RequestHandler):
    def get(self):
    self.response.headers['Content-Type'] = 'text/plain'


    query = ndb.gql("SELECT * FROM Product where name >= 'a' LIMIT 5 ")
    output = query.fetch()

    #query = Product.query(Product.name == 'zubo - pre-owned - nintendo ds')
    #query = Product.query()
    #output = query.fetch(10)
    self.response.write(output)


app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)