数据库的数据一般需要为每个数据准备能唯一表示这条数据的主键,uuid 是最好的选择了,32 位的随机数自动生成。
1. 两者结合
使用 uuid.uuid1 产生一个随机数
在使用 random.sample() 产生一个随机字符串
将两者进行拼接
import uuid
import random
def random_str(num=6):
uln = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
rs = random.sample(uln, num) # 生成一个 指定位数的随机字符串
a = uuid.uuid1() # 根据 时间戳生成 uuid , 保证全球唯一
b = ''.join(rs + str(a).split("-")) # 生成将随机字符串 与 uuid拼接
return b # 返回随机字符串
b = random_str()
print(b)
print(len(b))
执行结果:
OqU4zi8a0f5612c43011eb9fa75c879c7e2420
38
2.uuid1
import uuid
# 生成 uuid
# 从主机ID、序列号和当前时间生成UUID
# 保证全球唯一
uuid_value = uuid.uuid1()
uuid_str = uuid_value.hex # 将值转换成 字符串, 并且不添加 -
uuid_int = uuid_value.int # 返回生成的 int 值
print("uuid_value: ", uuid_value)
print(" uuid_str: ", uuid_str)
print(" uuid_int: ", uuid_int)
执行结果:
uuid_value: 8a0f5613-c430-11eb-b4ff-5c879c7e2420
uuid_str: 8a0f5613c43011ebb4ff5c879c7e2420
uuid_int: 183513093724474589682414652064131851296
3.random.sample
import string
import random
seeds = string.digits
random_str = random.sample(seeds, k=10)
print("".join(random_str))
执行结果:
5197803264
- 说明一下:string.digits是一个定义好的数字字符串,就是从"0123456789"。
- choice和choices随机取得数字是可重复的,而sample方法的随机数是不会重复的。这个是他们之间的区别之一。
4.uuid4
print(uuid.uuid4().int)
print(uuid.uuid4().hex)
print(str(uuid.uuid4().int)[-22:])
print(int(str(uuid.uuid4().int)[-22:]))
输出:
327768030725014732502607372483601148943
c3277eba340a4ce7b78cc52df95b4ccc
5072888061090033776213
6822066085216242463796