Discuss / Python / 廖老师,时间戳一样的时候,next_id() 会生成两个相同的字符串

廖老师,时间戳一样的时候,next_id() 会生成两个相同的字符串

Topic source

太阳尚远Y

#1 Created at ... [Delete] [Delete and Lock User]
def save(loop):
    pool = yield from orm.create_pool(loop, user='root', password='123456', db='awesome')
    user1 = User(name='xiaoming', email='yeqianfeng@outlook.com', password='123456789', image='about:blank',
                 admin='abc', )
    user2 = User(name='qianfeng', email='yeqianfeng@163.com', password='abcdefg', image='about:blank',
                 admin='abc', )
    users = list()
    users.append(user1)
    users.append(user2)
    for user in users:
        yield from user.save()

这段代码执行的时候会出错,就是因为生成相同的id了 这是部分日志:

INFO:root:using the default value for create_time:1459000004.3849406
INFO:root:using the default value for id:001459000004384cad77df29c9741f3bde4b6489e860ed6000
INFO:root:SQL: INSERT INTO users (password, image, email, name, create_time, admin, id) VALUE (?, ?, ?, ?, ?, ?, ?)
INFO:root:using the default value for create_time:1459000004.3849406
INFO:root:using the default value for id:001459000004384cad77df29c9741f3bde4b6489e860ed6000
INFO:root:SQL: INSERT INTO users (password, image, email, name, create_time, admin, id) VALUE (?, ?, ?, ?, ?, ?, ?)

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

next_id()不可能生成相同的id,因为里面包含一个uuid:

def next_id():
    return '%015d%s000' % (int(time.time() * 1000), uuid.uuid4().hex)

定义model的时候,default=next_id不是default=next_id(),前者是函数,后者是一个固定的str


  • 1

Reply