我想使用PeeWee IntegerField而不是DateTimeField使用秒来管理数据库中的时间戳。我知道字段定义可以使用可调用的默认值,但我需要做类似的事情:
timestamp = IntegerField(default=int(datetime.datetime.now().strftime('%s')))
我认为这是不正确的,因为默认值实际上不应该调用callable。
我也尝试将它包装在一个函数中并将该函数作为可调用函数传递:
def get_timestamp():
return int(datetime.datetime.now().strftime('%s'))
timestamp = IntegerField(default=get_timestamp)
然而,这也不起作用。
有没有办法实现这一点,还是我必须改造我的数据才能使用DateTimeFields?
答案 0 :(得分:0)
我看到你提到你试过包装你的函数调用,我很惊讶这对你不起作用,因为它似乎对我有效:
>>> from datetime import datetime
>>> from peewee import *
>>> db = SqliteDatabase(':memory:')
>>> def get_ts():
... return int(datetime.now().strftime('%s'))
>>> get_ts()
1448471382
>>> class TestModel(Model):
... ts = IntegerField(default=get_ts)
... class Meta:
... database = db
>>> TestModel.create_table()
>>> tm = TestModel.create()
>>> tm.ts
1448471421
>>> ts_from_db = TestModel.get(TestModel.id == tm.id)
>>> ts_from_db.ts
1448471421
你需要包装它的原因是因为默认参数采用可调用,如果只传递函数调用的结果,它会将其解释为另一个静态值。