Sam*_*nty 4 python sqlite orm web.py peewee
当我插入一行时,该字段将填充服务器启动的时间而不是插入行的时间.为什么会发生这种情况,解决方案是什么?顺便说一下,我正在使用SQLite.
class LOG(peewee.Model):
id = peewee.IntegerField(unique=True,primary_key=True)
timestamp = peewee.DateTimeField(default=datetime.datetime.now())
log = peewee.CharField()
by = peewee.IntegerField(default=1)
class Meta:
database = database
LOG.create(log = _log , by = _by)
# above statement is called at say 3:00 pm and I started the server at 2:00 pm, then the row is inserted with timestamp of 2pm not 3pm.
Run Code Online (Sandbox Code Playgroud)
col*_*fer 21
当您的字段由Python解释器加载时,它只调用datetime.datetime.now()一次.所以你总会获得相同的价值.
Peewee支持使用callables作为默认args,所以不要只调用 now()来传递函数:
timestamp = peewee.DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)
Ant*_*nto -7
它正在花费编译时间(服务器启动的时间)
[编辑]因为您已经使用datetime.datetime.now()(带括号)按照@coleifer的建议,您可以使用datetime.datetime.now(不带括号)来启动运行时调用。
[旧答案] 覆盖 save 方法也可以
class LOG(peewee.Model):
id = peewee.IntegerField(unique=True,primary_key=True)
timestamp = peewee.DateTimeField()
log = peewee.CharField()
by = peewee.IntegerField(default=1)
class Meta:
database = database
def save(self, *args, **kwargs):
self.modified = datetime.datetime.now()
return super(Something, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
似乎与此重复, peewee 中的 DateTimeField 是否有像 MySQL 中的 TimeStamp 一样的自动更新选项?
| 归档时间: |
|
| 查看次数: |
5607 次 |
| 最近记录: |