In Peewee, I have a default datetime field datetime.datetime.now (). But when inserted, it takes time when the server was started. What for

When I insert a row, the field is filled with the time when the server was started, and not the time when the row was inserted. Why is this happening and what is the solution? BTW I am using 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.
+4
source share
4 answers

When your field is loaded by the Python interpreter, it calls datetime.datetime.now()once and only once. This way you always get the same value.

Peewee supports the use of callables for default arguments, so instead of calling now () just pass a function:

timestamp = peewee.DateTimeField(default=datetime.datetime.now)
+20
import datetime
import peewee as pw

class MyModel(pw.Model):
    updated_at = pw.DateTimeField(default=datetime.datetime.now())

def update(self, *args, **kwargs):
    kwargs['updated_at'] = datetime.datetime.now()
    return super(MyModel, self).update(*args, **kwargs)
-1

.

class myModel(Model):

    name = CharField()
    timestamp = DateTimeField()

    def save(self, *args, **kwargs):
        self.timestamp = datetime.datetime.now()
        super(myModel, self).save(*args, **kwargs)

.

-2

(, )

[], datetime.datetime.now() ( ). @coleifer, datetime.datetime.now ( ), .

[ ]

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)

, DateTimeField peewee, TimeStamp MySQL?

-6
source

Source: https://habr.com/ru/post/1610562/


All Articles