我在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数据存储区与产品类型一起使用,而不是现有的已定义产品的数据存储区,但我无法找到如何建立连接。
答案 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 answer的remote 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)