请求该实体的正确方法是什么? Python 和 GQL

What is the proper way to request this entity? Python and GQL

我正在尝试查看 post 函数中的用户名变量是否与 accountsArchive 实体中的用户名匹配。

我认为问题在于 user.username 不是引用用户名实体的正确方式。另外,上面的查询可能有问题。查看两个用户名是否匹配的正确方法是什么?

Python

class accountsArchive(db.Model): 
    # The username entity
    username = db.StringProperty(required = True)
    password = db.TextProperty(required = True)
    email = db.StringProperty(required = True)
    dateJoined = db.DateTimeProperty(auto_now_add = True)

class loginPage(Handler): 
     def post(self): 
        # The username variable
        username = self.request.get("username")
        password = self.request.get("password")

        # The query
        user = db.GqlQuery("SELECT * FROM accountsArchive WHERE      
                            user.username = :name", name=username)
        
        # This is how I tried to check if the two usernames matched
        if username == user.username: 
            # Do stuff

您的代码中有很多问题。

首先

user = db.GqlQuery("SELECT * FROM accountsArchive WHERE      
                        user.username = :name", name=username)

不正确 - 您应该返回并重新阅读文档 https://cloud.google.com/appengine/docs/python/datastore/gqlreference?hl=en

这个查询应该是

user = db.GqlQuery("SELECT * FROM accountsArchive WHERE      
                        username = :name", name=username)

下一个。

这行代码的结果是 GqlQuery class 的一个实例,而不是用户或您可能期望的用户列表。参见 https://cloud.google.com/appengine/docs/python/datastore/gqlqueryclass?hl=en

您现在必须获取结果 and/or 遍历它们。

例如

for u in user.run():
    if u.username == username:
       # then do something

但是你有一个问题。这其中没有任何内容会限制系统为单个唯一用户。因此,如果您有多个用户使用相同的用户名,您会怎么做。

一些评论。

您可以使用用户名作为 accountsArchive 的键,这意味着您只需使用获取而不是查询。

其次,如果您是 appengine 的新手并且没有现有的代码库,请开始使用 ndb。