GAE数据存储区查询

时间:2013-06-24 16:21:54

标签: google-app-engine datastore

我正在尝试列出在我的测试GAE应用中输入到我的数据存储区中的所有用户,并打印出每个用户的用户名。但是,当我运行下面的代码时,我得到一个错误说

  

self.query = User.all()   AttributeError:类型对象'User'没有属性'all'

我认为self.query = User.all()会返回我数据库中的所有用户吗?

我的代码如下。 提前谢谢!

PS。我知道我的用户搜索器表单是要求用户名而不对其执行任何操作,但过滤是一项以后的任务 - 我只是想确保我首先获得基本查询。

from google.appengine.ext import ndb

import webapp2
import uuid

class User(ndb.Model):
    db_UID = ndb.StringProperty(indexed = True)
    db_username = ndb.StringProperty(indexed = True)
    db_password = ndb.StringProperty(indexed = True)
    db_email = ndb.StringProperty(indexed = True)
    db_resetID = ndb.StringProperty(indexed = True)


class UsersPage(webapp2.RequestHandler):
    def get(self):
    self.response.write('<html><body><h1>User Info Page</h1>')
    self.response.write("""
        <form method = "post">
        Username: <input type = "textarea" name = "user_username"></input><br>
        Password: <input type = "textarea" name = "user_password"></input><br>
        Email address: <input type = "textarea" name = "user_email"></input><br>
        <input type = "submit"></input>
        </form>""")
    self.response.write('</body></html>')

def post(self):
    UNIQUE_ID_STRING = str(uuid.uuid1())
    self.user = User(db_UID = UNIQUE_ID_STRING ,
        db_username = self.request.get('user_username'), 
        db_password = self.request.get('user_password'),
        db_email = self.request.get('user_email'))
    self.user.put()
    self.redirect('/user')



class UserFinder(webapp2.RequestHandler):
def get(self):
    self.response.write('<html><body><h1>Search username</h1>')
    self.response.write("""
        <form method = "post">
        Username: <input type = "textarea" name = "user_username"></input><br>
        <input type = "submit"></input>
        </form>""")
    self.response.write('</body></html>')

def post(self):
    self.query = User.all()
    self.response.write('<html><body><h1>Search username</h1>')

    for self.user in self.query:
        self.response.write('<p>%s</p>' % self.User.db_username)

    self.response.write('</body></html>')


application = webapp2.WSGIApplication([
('/user', UsersPage),
('/userfinder', UserFinder),
], debug = True)

1 个答案:

答案 0 :(得分:4)

与基本的“db”版本不同,NDB模型不使用all()进行查询,而是使用query(),所以

self.query = User.query()

NDB docs on queries可能有用。

顺便说一句,尽可能多地使用self有点不寻常;除了调用self.response.writeself.redirect之外,只使用局部变量会更加混乱(如果你必须发布更多问题,那就好了!),并且可以节省你的输入。 所以你的帖子方法将成为:

query = User.all()
self.response.write('<html><body><h1>Search username</h1>')

for user in query:
  self.response.write('<p>%s</p>' % user.db_username)

self.response.write('</body></html>')