【问题标题】:Confusion between Appengine Datastore db and ndbAppengine Datastore db 和 ndb 之间的混淆
【发布时间】:2013-11-13 23:28:01
【问题描述】:

我正在学习 Udacity 的 Web 开发课程,该课程使用 db.Model 进行授课。我想改为在 ndb 中进行。

我们将不胜感激。我在将以下 db.Model 代码转换为 ndb.Model 时遇到了很多麻烦:

class User(db.Model):
    name = db.StringProperty(required = True)
    pw_hash = db.StringProperty(required = True)
    email = db.StringProperty()

    @classmethod
    def by_name(cls, name):
        u = User.all().filter('name =', name).get()
        # My Attempt:
        # u = User.query(cls.username).get
        return u

    @classmethod
    def login(cls, name, pw):
        u = cls.by_name(name)
        if u:
            return u

我相信这组类方法的目的是返回用户实体,给定它的“用户名”属性,如果它存在的话。我很感激任何提示!感谢阅读。

【问题讨论】:

标签: google-app-engine app-engine-ndb


【解决方案1】:

ndb 中的许多东西具有相同的名称,并且它们的工作方式与 db 中的相同,因此更改属性非常容易。在模型实例上调用 query 而不是 .all()。过滤是使用 python 比较运算符完成的,模型的属性在左侧(反过来也可以,从未尝试过。

class User(ndb.Model):
    name = ndb.StringProperty(required = True)
    pw_hash = ndb.StringProperty(required = True)
    email = ndb.StringProperty()

    @classmethod
    def by_name(cls, name):
        u = cls.query().filter(User.name == name).get()
        return u

    @classmethod
    def login(cls, name, pw):
        u = cls.by_name(name)
        if u:
            return u

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 2015-06-01
    • 2020-01-08
    • 2012-10-21
    • 2011-09-22
    • 2013-01-03
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多