如何使用混合方法转换查询数据?

时间:2019-05-28 17:28:57

标签: ponyorm

由于sqlite和ponyorm中存在一些明显的限制(无法存储带有时区数据的日期时间),我想实现一种混合方法,该方法在我的实体中采用“ datetime”列,而在同一实体中使用str列包含时区的字符串,并返回带有已应用时区的datetime:

import datetime
from dateutil import tz
class Activity(db.Entity):
   startTime = orm.Required(datetime.datetime)
   timezoneLocal = orm.Required(str)

   @property
   def startTimeLocal(self):
       return self.startTime.replace(tzinfo=tz.UTC).astimezone(tz=tz.gettz(self.timezoneLocal))

在调用entity.startTimeLocal时,我获得了具有正确时区的datetime对象:

> time = orm.get(a for a in db.Activity)
> time.startTimeLocal
datetime.datetime(2019, 5, 2, 11, 10, 36, tzinfo=tzfile('/usr/share/zoneinfo/America/Los_Angeles'))

尝试在查询中使用entity.startTimeLocal时,它将失败:

> orm.get(a.startTimeLocal for a in db.Activity)
*** TypeError: Expression `tz.gettz` has unsupported type 'GettzFunc'

0 个答案:

没有答案