web2py_uuid() 在多次调用中返回相同的值?
web2py_uuid() returning same value over multiple invocations?
我在 auth_user
table 中添加了一个 uuid
字段,并将该字段的 default
值设置为 web2py_uuid()
,如下所示以下:
模块:
class User_Custom(Base):
def __init__(self, ...):
...
auth.settings.extra_fields['auth_user']= [
Field('uuid', type='string', default = web2py_uuid(),
readable=False, writable=False, label=current.T('UUID')),
]
我正在使用一些自定义函数来填充我的数据库,并发现 auth_user
中的每个用户都以相同的 uuid
值结束。
`populate.py'模型文件:
def create_user():
user_dict = dict(
first_name = random.choice(FIRST_NAMES),
last_name = random.choice(LAST_NAMES),
email = ...,
password = ..,
)
return db.auth_user.insert(**user_dict)
def create_profile(count = 100):
for idx in range(count):
user_id = create_user()
# create a bunch of data for tables referenced by db.auth_user
我的印象是,以上述方式创建的每个用户都会有一个唯一的 uuid(即每次创建用户时都会调用 web2py_uuid,并且每次都会生成一个唯一的输出时间)。一次调用 create_profile()
生成的所有用户的 uuid 值都是统一的,这是预期的行为吗?有没有办法保证每个用户在使用上例中的 default
参数时都有唯一的 uuid 值?
通过调用 web2py_uuid()
函数,您将生成一个 UUID,然后将其设置为该字段的默认值。该值将保留为整个请求的默认值,因此在该请求期间插入的任何记录都将获得相同的 UUID。如果你想为每个插入生成一个单独的默认值,你必须提供一个函数作为默认值,DAL 将在每次插入时自动调用该函数。所以,应该是:
Field('uuid', default=web2py_uuid, ...)
注意,default=web2py_uuid
而不是 default=web2py_uuid()
。
来自文档:
default
sets the default value for the field. The default value is used when performing an insert if a value is not explicitly specified. It is also used to pre-populate forms built from the table using SQLFORM
. Note, rather than being a fixed value, the default can instead be a function (including a lambda function) that returns a value of the appropriate type for the field. In that case, the function is called once for each record inserted, even when multiple records are inserted in a single transaction.
我在 auth_user
table 中添加了一个 uuid
字段,并将该字段的 default
值设置为 web2py_uuid()
,如下所示以下:
模块:
class User_Custom(Base):
def __init__(self, ...):
...
auth.settings.extra_fields['auth_user']= [
Field('uuid', type='string', default = web2py_uuid(),
readable=False, writable=False, label=current.T('UUID')),
]
我正在使用一些自定义函数来填充我的数据库,并发现 auth_user
中的每个用户都以相同的 uuid
值结束。
`populate.py'模型文件:
def create_user():
user_dict = dict(
first_name = random.choice(FIRST_NAMES),
last_name = random.choice(LAST_NAMES),
email = ...,
password = ..,
)
return db.auth_user.insert(**user_dict)
def create_profile(count = 100):
for idx in range(count):
user_id = create_user()
# create a bunch of data for tables referenced by db.auth_user
我的印象是,以上述方式创建的每个用户都会有一个唯一的 uuid(即每次创建用户时都会调用 web2py_uuid,并且每次都会生成一个唯一的输出时间)。一次调用 create_profile()
生成的所有用户的 uuid 值都是统一的,这是预期的行为吗?有没有办法保证每个用户在使用上例中的 default
参数时都有唯一的 uuid 值?
通过调用 web2py_uuid()
函数,您将生成一个 UUID,然后将其设置为该字段的默认值。该值将保留为整个请求的默认值,因此在该请求期间插入的任何记录都将获得相同的 UUID。如果你想为每个插入生成一个单独的默认值,你必须提供一个函数作为默认值,DAL 将在每次插入时自动调用该函数。所以,应该是:
Field('uuid', default=web2py_uuid, ...)
注意,default=web2py_uuid
而不是 default=web2py_uuid()
。
来自文档:
default
sets the default value for the field. The default value is used when performing an insert if a value is not explicitly specified. It is also used to pre-populate forms built from the table usingSQLFORM
. Note, rather than being a fixed value, the default can instead be a function (including a lambda function) that returns a value of the appropriate type for the field. In that case, the function is called once for each record inserted, even when multiple records are inserted in a single transaction.