Python PeeWee IntegerField - unix时间戳的默认值

时间:2015-11-23 21:32:25

标签: peewee flask-peewee

我想使用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?

1 个答案:

答案 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

你需要包装它的原因是因为默认参数采用可调用,如果只传递函数调用的结果,它会将其解释为另一个静态值。