前言
在python存入数据库时,如果数据库的主键不是自增方式,那么我们可能需要自己生成一个唯一标识符,现在最好的方法就是md5加密生成的32位作为主键,本文将会介绍python的两种自动生成唯一标识的方式。
python MD5加密方法
在介绍方式之前先了解一下python如何对数据进行md5加密
依赖包 :
import hashlib
用法:
def md5(string):
# 对要加密的字符串进行指定编码
string = string.encode(encoding ='UTF-8')
# md5加密
print(hashlib.md5(string))
# 将md5 加密结果转字符串显示
string = hashlib.md5(string).hexdigest()
方法一:
依赖包:
import uuid
用法:
# 获取唯一加密值,uuid1 根据主机mac地址和时间戳生成全球唯一加密值唯一缺点会暴露mac地址 id = uuid.uuid1() #将生成的加密值去除-获得32位加密值 id = id.replace('-','')
知识点
uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现。有时也称guid(global unique identifier)。python中自带了uuid模块来进行uuid的生成和管理工作。
python中的uuid模块基于信息如MAC地址、时间戳、命名空间、随机数、伪随机数来uuid。具体方法有如下几个:
uuid.uuid1() 基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性,缺点会暴露mac地址。
uuid.uuid2() 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。不过需要注意的是python中没有基于DCE的算法,所以python的uuid模块中没有uuid2这个方法。
uuid.uuid3(namespace,name) 通过计算一个命名空间和名字的md5散列值来给出一个uuid
uuid.uuid4() 通过伪随机数得到uuid,是有一定概率重复的
uuid.uuid5(namespace,name) 和uuid3基本相同,只不过采用的散列算法是sha1
---------------------
参考文档:https://www.cnblogs.com/hellojesson/p/6410445.html
https://www.cnblogs.com/franknihao/p/7307224.html
方法二:
依赖包:
import hashlib import os
用法:
//利用os随机生成26个字符 然后对其md5加密
id = hashlib.md5(os.urandom(26)).hexdigest()
知识点:
os.urandom(n)函数
函数定位: Return a string of n random bytes suitable for cryptographic use.
意思就是,返回一个有n个byte那么长的一个string
在文档中,被归结于os这个库的Miscellaneous Functions,意思是不同种类的函数(也可以说是混种函数)
原因是: This function returns random bytes from an OS-specific randomness source. (函数返回的随机字节是根据不同的操作系统特定的随机函数资源。即,这个函数是调用OS内部自带的随机函数的。有特异性)
---------------------
参考文档:https://blog.csdn.net/a19990412/article/details/80934268