2017-09-07 1 views
0

Ich werde einen Test mit PeeWee machen und ich sehe ein großes Problem. Beispiel:gleicher Standardwert mit Python und 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 

In diesem Code UUID und das Datum sind die gleichen und es ist nicht normal. Warum und wie ändern Sie dies in unterschiedliche Werte für jede neue Schöpfung?

Danke

Antwort

2

Das Problem besteht darin, wie Sie die Standardwerte für die UUID und Datumsfelder definieren. Zum Zeitpunkt der Beispielklassendefinition führen Sie in der Uuid-Standarddeklaration die uuid4-Funktion aus und weisen diesen Wert als Standardwert zu. Das gleiche gilt für dt.datetime.now; Sie führen es auch aus und weisen die zurückgegebene Zeit als Standardwert zu.

Die folgende Änderung behebt das Problem:

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