我正在对具有日期值的字符串属性的过滤器查询数据存储类型。我要访问的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)
答案 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')