【问题标题】:converting NDB Datetimeproperty to date将 NDB Datetime 属性转换为日期
【发布时间】:2014-06-28 22:47:48
【问题描述】:

我有一个 NDB 日期时间属性存储在 Google App Engine 上。我试图通过将日期时间转换为日期来查询自昨天以来的所有记录,然后过滤查询以查找大于或等于昨天日期的任何内容。但是,我收到以下错误:

follower_trans = fol.query(
    datetime.datetime.date(fol.followed_date) >= self.yesterday).fetch()

TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'DateTimeProperty'

如果我只使用datetime.date(),它会发送一个错误,需要一个整数作为参数。

【问题讨论】:

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


    【解决方案1】:

    您不能将转换作为查询的一部分,因此您必须创建“昨天”作为日期时间并使用它进行过滤。

    【讨论】:

      【解决方案2】:

      fol.followed_date 是模型的属性,而不是实体的值。您不能将 属性 转换为日期,因为它没有价值。您需要修复查询构造函数:

      follower_trans = fol.query(fol.followed_date >= self.yesterday).fetch()
      

      (假设您已将 self.yesterday 创建为日期时间对象。)

      此外,任何类名都可以使用大写字母。应该是:

      class Fol(ndb.Model):
          followed_date =  ndb.DateTimeProperty(auto_now_add = True)
      

      Fol.query(Fol.followed_date >= self.yesterday).fetch()
      

      【讨论】:

      • 当我尝试 fol.followed_date.date() 时,我收到此错误:AttributeError: 'DateTimeProperty' object has no attribute 'date'
      • 问题是您使用的是属性而不是值。您的查询应该类似于 fol.query(followed_date >=self.yesterday).fetch() fol.followed_date 是模型的属性,而不是实体的日期。
      • 从技术上讲,查询应该是Fol.query(Fol.followed_date >= self.yesterday) 这假设yesterday 实际上是一个日期时间。如果是日期,您可能需要先将其转换为日期时间。
      • 是的,错误来自尝试将 property fol.followed_date 转换为日期对象。
      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多