我正在寻找一种非常快速的方法来生成表中主键的字母数字唯一id。
想要这个吗?
def genKey():
hash = hashlib.md5(RANDOM_NUMBER).digest().encode("base64")
alnum_hash = re.sub(r'[^a-zA-Z0-9]', "", hash)
return alnum_hash[:16]
生成随机数的好方法是什么?
如果我基于microtime,我必须考虑同时从不同实例调用genKey()的可能性。
还是有更好的方法来做这些?
Tags:
看看uuid module(Python 2.5+)。
一个简单的例子:
注意,OP要求16个字符的字母数字字符串,但是UUID4字符串是32个字符长。不应截断此字符串,而应使用完整的32个字符。
由于没有一个答案为您提供由字符0-9、a-z、a-z组成的随机字符串:下面是一个工作解决方案,它将为您提供大约62^16=4.76724 e+28个键中的一个:
它也非常可读,而不需要知道ASCII代码的心脏。
自从
python 3.6.2
以来,还有一个更短的版本:您可以使用:
不能保证生成的密钥是唯一的,因此您应该准备好在原始插入失败时使用新密钥重试。此外,您可能希望考虑使用确定性算法从自动递增的id生成字符串,而不是使用随机值,因为这将保证您的唯一性(但它也将提供可预测的键)。
相关问题 更多 >
编程相关推荐