与 python 和 peewee 相同的默认值
same default value with python and peewee
我打算用 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
这段代码中uuid和date相同,不正常。
为什么以及如何将其更改为每个新创建的不同值?
谢谢
问题在于您如何定义 uuid 和日期字段的默认值。在 Example class 定义时,在 uuid default 声明中,您正在执行 uuid4 函数并将该值指定为默认值。 dt.datetime.now也是如此;您也在执行它并将返回的时间分配为默认值。
以下更改解决了问题:
class Example(BaseModel):
uuid = CharField(default=uuid4)
date = DateTimeField(default=dt.datetime.now)
我打算用 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
这段代码中uuid和date相同,不正常。 为什么以及如何将其更改为每个新创建的不同值?
谢谢
问题在于您如何定义 uuid 和日期字段的默认值。在 Example class 定义时,在 uuid default 声明中,您正在执行 uuid4 函数并将该值指定为默认值。 dt.datetime.now也是如此;您也在执行它并将返回的时间分配为默认值。
以下更改解决了问题:
class Example(BaseModel):
uuid = CharField(default=uuid4)
date = DateTimeField(default=dt.datetime.now)