BadValueError:属性<type'datetime.date'=“”>的不受支持的类型

时间:2018-10-11 20:39:36

标签: python-3.x google-app-engine google-cloud-platform google-cloud-datastore

我正在对具有日期值的字符串属性的过滤器查询数据存储类型。我要访问的Kind属性Actual_reported_date未明确定义,而是String类型的动态属性。将属性值存储为字符串类型而不是日期类型是一个错误。现在有没有一种方法可以用字符串格式过滤具有日期比较的数据集?目标是过滤实际值大于实际输入值(from_date_formatted)的记录

BadValueError: Unsupported type for property <type 'datetime.date'>

引发异常的代码

from_date_formatted = datetime.datetime.strptime(from_date, '%Y-%m- 
                        %d').date()
query = EarningsSurprise.query(EarningsSurprise.ticker == ticker)
query = 
     query.filter(ndb.GenericProperty('actual_reported_date') >= 
                  from_date_formatted)
result = list(query.fetch()) # ( Exception is thrown at this point)

实体

class EarningsSurprise(ndb.Expando):
  stock_code = ndb.StringProperty()
  ticker = ndb.StringProperty()
  original_data_source = ndb.StringProperty()
  actual_data_provider = ndb.StringProperty()

  created = ndb.DateTimeProperty(auto_now_add=True)
  updated = ndb.DateTimeProperty(auto_now=True)

  @classmethod
  def create(cls, **kv):
    return EarningsSurprise(**kv)

1 个答案:

答案 0 :(得分:3)

您不需要在date()上放置strptime。它已经做到了:

from_date_formatted = datetime.datetime.strptime(from_date, '%Y-%m-%d')

接下来,actual_reported_date在哪里定义?如果您使用字符串格式的日期,则可以按YYYYMMDDHHMMSS轻松排序...因此,您可以通过以下方式测试不等式(作为字符串!):

from_date >= actual_reported_date # e.g. ('2018-05-22' >= '2017-11-22')