当我尝试从数据存储中获取一种类型时,它返回NoneType,就像查询是空的一样。我知道数据存储在保存时工作正常,但是从a查询中提取一种数据就不行了。在
同样在Google云控制台网站上使用GQL查询并使用SELECT * FROM User
确实返回所有类型。用户种类没有父类,它是根。我确保所有的属性都被索引了。在
我不知道我到底做错了什么。在
我的app.py
import webapp2
from google.appengine.ext import ndb
from google.appengine.ext.db import GqlQuery
class MainHandler(webapp2.RequestHandler):
def post(self):
message = self.request.body
message = message.splitlines()
if message[0] == "register":
user = User.create_user(message[1], message[2], message[3])
user_key = User.save_user(user)
if user_key is not None:
self.response.write(user_key)
else:
user = User.get_by_id(User.email == message[0])
if User.token == message[1]:
self.response.write("CURRENT")
else:
User.token = message[1]
User.save_user(user)
self.response.write("UPDATED")
def get(self):
self.response.write("CONNECTED")
user= User.query().get()
self.response.write("\n" + query.email)
class User(ndb.Model):
email = ndb.StringProperty()
token = ndb.StringProperty()
name = ndb.StringProperty()
@classmethod
def create_user(cls, email, token, name):
user = User(email=email, token=token, name=name, id=email)
return user
@classmethod
def save_user(cls, user):
user_key = user.put()
return user_key
@classmethod
def get_user(cls, email):
return User.get_by_id(User.email == email)
app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=True)
您似乎将
.get_by_id()
与查询混淆。在get_by_id
方法实际上被映射到调用ndb.Model._get_by_id_async
的ndb.Model._get_by_id
,后者需要一个实体密钥标识符来确定用于执行直接实体查找的实体密钥(不是查询!)。来自appengine.ext.ndb.model.py
:但在代码中,您将作为
id
传递一个bool:User.email == message[0]
,这很可能与任何现有的实体键标识符都不匹配,因此None
结果会导致您看到的错误。在由于可用的信息是实体属性的值(即
email
值),因此您可能希望执行查询,因此如下所示:所以我发现了问题所在。所以在我的电脑上设置googlecloudsdk的方式似乎有问题。当在google服务器上而不是在我的网络上运行相同的代码时,一切似乎都能正常工作。在
相关问题 更多 >
编程相关推荐