2017-09-07 1 views
0

Je vais faire un test avec PeeWee et je vois un gros problème. Exemple:même valeur par défaut avec python et peewee

from uuid import uuid4 
import datetime as dt 
import time 
from peewee import * 

dbfile = 'test.db' 
db = SqliteDatabase(dbfile) 

class BaseModel(Model): 
    class Meta: 
     database = db 

class Example(BaseModel): 
    uuid = CharField(default=str(uuid4())) 
    date = DateTimeField(default=dt.datetime.now()) 

try: 
    Example.create_table() 
except: 
    pass 
e1 = Example.create() 
time.sleep(1) 
e2 = Example.create() 
print(e1.uuid, e2.uuid) #Same uuid... 
print(e1.date, e2.date) #Same date 

Dans ce code, UUID et la date sont les mêmes et il est pas normal. Pourquoi et comment changer cette valeur pour chaque nouvelle création?

Merci

Répondre

2

Le problème est dans la façon dont vous définissez les valeurs par défaut pour les champs UUID et la date. Lors de la définition de la classe Example, dans la déclaration uuid default, vous exécutez la fonction uuid4 et vous affectez cette valeur comme valeur par défaut. La même chose est pour dt.datetime.now; vous l'exécutez également et attribuez l'heure retournée comme valeur par défaut.

Le changement suivant résout le problème:

class Example(BaseModel): 
    uuid = CharField(default=uuid4) 
    date = DateTimeField(default=dt.datetime.now)