Sol*_*oub 4 python google-app-engine
看起来在其他问题中已经有所涉及,但我仍然对如何实际做到这一点感到困惑.我缺乏经验对此没有多大帮助.
我有两个DateTimeProperties - StartTime和EndTime.我从EndTime中减去StartTime以获得持续时间.从我之前的问题(感谢所有回答!)看起来这个操作正在生成timedelta.
似乎没有被直接存储timedelta在GAE数据存储的简单方法,所以这意味着我需要它要么转换为int以毫秒为单位,一个漂浮在几秒或时间.
我稍后还需要对此进行其他计算,例如计算平均值.持续时间.基于此,int似乎对我现在最有意义.
最好的方法是什么,或者有一个我可以玩的教程?
谢谢!
Nic*_*son 12
为了使其尽可能简单,有两个步骤:将timedelta转换为int或float,并将其存储在数据存储区中.首先,将timedelta转换为microtime:
def timedelta_to_microtime(td):
return td.microseconds + (td.seconds + td.days * 86400) * 1000000
Run Code Online (Sandbox Code Playgroud)
但是,您不必自己进行转换 - 您可以定义自定义数据存储区属性,这样您就可以将timedeltas直接存储到模型中:
class TimeDeltaProperty(db.Property):
def get_value_for_datastore(self, model_instance):
value = self.__get__(model_instance, model_instance.__class__)
if value is not None:
return timedelta_to_microtime(value)
def make_value_from_datastore(self, value):
if value is not None:
return datetime.timedelta(microseconds=value)
Run Code Online (Sandbox Code Playgroud)
现在您可以像任何其他属性一样使用此属性:
class MyModel(db.Model):
td = TimeDeltaProperty(required=True)
entity = MyModel(td=datetime.datetime.now()-some_datetime)
key = entity.put()
entity = db.get(key)
print entity.td
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7481 次 |
最近记录: |