【问题标题】:What is the proper way to request this entity? Python and GQL请求该实体的正确方法是什么? Python 和 GQL
【发布时间】:2015-12-22 21:44:32
【问题描述】:

我正在尝试查看 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

【问题讨论】:

  • 代码太多,任何人都无法涉足。
  • 谢谢!我会记住这一点,以备将来的问题。

标签: database google-app-engine entity google-cloud-datastore gql


【解决方案1】:

您的代码中存在许多问题。

首先

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 类的实例,而不是用户,或者您可能期望的用户列表。见https://cloud.google.com/appengine/docs/python/datastore/gqlqueryclass?hl=en

您现在必须获取结果和/或遍历它们。

例如

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

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

一些cmets。

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

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

【讨论】:

  • 以前不知道 .run()。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 2016-07-13
  • 2020-02-07
  • 2018-04-19
  • 2010-12-28
  • 2011-05-04
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多