前言
在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