gpt4 book ai didi

python - Google App Engine 计算属性日期返回引发异常

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:14 25 4
gpt4 key购买 nike

我在使用 Google App Engine (Python) 装饰器 @db.CompulatedProperty 时遇到问题。

我有一个像这样的模型:

class Employee(db.Model):
name = db.StringProperty()
date_of_join = db.DateProperty()

@db.ComputedProperty
def date_of_employment(self):
return self.date_of_join

当我尝试将值插入模型时,它抛出异常:

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

compatedProperty 不能返回/插入日期值吗?

编辑

我已经找到解决办法了。 Appengine 接受计算属性的日期时间,而不是日期对象:

class Employee(db.Model):
name = db.StringProperty()
date_of_join = db.DateProperty()

@db.ComputedProperty
def date_of_employment(self):
return datetime.combine(self.date_of_join, datetime.min.time())

最佳答案

我想说你遇到了 GAE 中的一个错误,它不允许使用 datetime.date 作为 ComputedProperty。

their issue tracker中有一个关于此问题的问题报告,但如果您好奇,相关代码在这里:

  • google/appengine/api/datastore_types.py:ValidateProperty:因为 datetime.date 不在 _VALIDATE_PROPERTY_VALUES、_PROPERTY_TYPES 和 _PACK_PROPERTY_VALUES 字典中
  • google/appengine/api/datastore_types.py:ValidateProperty:因为没有实现方法将 datetime.date “打包”为数据存储区友好的值(即 long),就像datetime.datetime (PackDatetime)
  • 如果您在 google/appengine/ext/ndb/model.py:GenericProperty:_db_set_value 中使用 ndb:因为 ComputedProperty 继承自它,并且 _db_set_value 不会考虑 datetime.date

但是,用一位团队成员的话说(查看问题报告):

In the case of datetime.date, when ndb reads the ComputedProperty from the Datastore, it reads an integer with a time meaning. However, it does not know if it should convert it to a datetime.date or to a datetime.datetime. When you use a DateProperty or a DatetimeProperty, ndb knows which time to convert to based on the type of your property.

顺便说一句:我建议迁移到新的 ndb 模块,而不是坚持使用 db (但是,这种特殊情况在那里也不起作用)

关于python - Google App Engine 计算属性日期返回引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22652872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com