Python 无法从加载到app engine数据存储的实体进行查询
我是python的新手。我无法从实体查询-UserDetails和我加载到app engine数据存储的电话簿。我根据Brett的youtube视频“在GAE上开发和部署应用程序”——shoutout应用程序,编写了下面的UI。我只是试着做一些反向工程来从数据存储中查询,但每一步都失败了Python 无法从加载到app engine数据存储的实体进行查询,python,google-app-engine,Python,Google App Engine,我是python的新手。我无法从实体查询-UserDetails和我加载到app engine数据存储的电话簿。我根据Brett的youtube视频“在GAE上开发和部署应用程序”——shoutout应用程序,编写了下面的UI。我只是试着做一些反向工程来从数据存储中查询,但每一步都失败了 #!/usr/bin/env python import wsgiref.handlers from google.appengine.ext import db from google.appengine.
#!/usr/bin/env python
import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
import models
class showPhoneBook(db.Model):
""" property to store user_name from UI to persist for the session """
user_name = db.StringProperty(required=True)
class MyHandler(webapp.RequestHandler):
def get(self):
## Query to get the user_id using user_name retrieved from UI ##
p = UserDetails.all().filter('user_name = ', user_name)
result1 = p.get()
for itr1 in result1:
userId = itr.user_id
## Query to get the phone book contacts using user_id retrieved ##
q = PhoneBook.all().filter('user_id = ', userId)
values = {
'phoneBookValues': q
}
self.request.out.write(
template.render('phonebook.html', values))
def post(self):
phoneBookuser = showPhoneBook(
user_name = self.request.get('username'))
phoneBookuser.put()
self.redirect('/')
def main():
app = webapp.WSGIApplication([
(r'.*',MyHandler)], debug=True)
wsgiref.handlers.CGIHandler().run(app)
if __name__ == "__main__":
main()
这是我的models.py文件,我在其中定义了UserDetails和PhoneBook类
#!/usr/bin/env python
from google.appengine.ext import db
#Table structure of User Details table
class UserDetails(db.Model):
user_id = db.IntegerProperty(required = True)
user_name = db.StringProperty(required = True)
mobile_number = db.PhoneNumberProperty(required = True)
#Table structure of Phone Book table
class PhoneBook(db.Model):
contact_id = db.IntegerProperty(required=True)
user_id = db.IntegerProperty(required=True)
contact_name = db.StringProperty(required=True)
contact_number = db.PhoneNumberProperty(required=True)
以下是我面临的问题,1) 我无法在get(self)方法中调用
user\u name
(从用户界面--phoneBookuser=showPhoneBook(user\u name=self.request.get('username'))
)来查询用户详细信息以获取相应的user\u name
2) 从models.py文件导入时,代码无法识别UserDetails和电话簿类。
3) 我试图在main.py文件中定义UserDetails和PhoneBook类,但在result1=p.get()
处出现错误,表示BadValueError:property的类型不受支持:
从两周以来,我一直在努力克服我所陷入的困境,但徒劳无功。请帮助我理顺我的代码('因为我觉得我写的代码一直都是容易出错的代码)。我建议您阅读GAE found的Python文档
一些评论:
要使用在models.py
中找到的模型,您需要使用前缀models.
(例如models.UserDetails
)或使用
从模型导入*
在MyHandler.get()
中,不查找username
get参数
要获取与查询对应的值,请执行p.fetch(1)
notp.get()
你也应该阅读。我建议您将模型设置为:
class UserDetails(db.Model):
user_name = db.StringProperty(required = True)
mobile_number = db.PhoneNumberProperty(required = True)
#Table structure of Phone Book table
class PhoneBook(db.Model):
user = db.ReferenceProperty(UserDetails)
contact_name = db.StringProperty(required=True)
contact_number = db.PhoneNumberProperty(required=True)
然后您的MyHandler.get()
代码将如下所示:
def get(self):
## Query to get the user_id using user_name retrieved from UI ##
user_name = self.request.get('username')
p = UserDetails.all().filter('user_name = ', user_name)
user = p.fetch(1)[0]
values = {
'phoneBookValues': user.phonebook_set
}
self.response.out.write(template.render('phonebook.html', values))
(不用说,您需要处理在数据库中找不到用户名的情况)
我不太明白showPhoneBook
model的意义
我建议您阅读GAE-found的Python文档 一些评论:
models.py
中找到的模型,您需要使用前缀models.
(例如models.UserDetails
)或使用
从模型导入*MyHandler.get()
中,不查找username
get参数p.fetch(1)
notp.get()
class UserDetails(db.Model):
user_name = db.StringProperty(required = True)
mobile_number = db.PhoneNumberProperty(required = True)
#Table structure of Phone Book table
class PhoneBook(db.Model):
user = db.ReferenceProperty(UserDetails)
contact_name = db.StringProperty(required=True)
contact_number = db.PhoneNumberProperty(required=True)
然后您的MyHandler.get()
代码将如下所示:
def get(self):
## Query to get the user_id using user_name retrieved from UI ##
user_name = self.request.get('username')
p = UserDetails.all().filter('user_name = ', user_name)
user = p.fetch(1)[0]
values = {
'phoneBookValues': user.phonebook_set
}
self.response.out.write(template.render('phonebook.html', values))
(不用说,您需要处理在数据库中找不到用户名的情况)