web-dev-qa-db-fra.com

Comment créer un GUID / UUID dans Python

Comment créer un GUID dans Python indépendant de la plate-forme? J'ai entendu dire qu'une méthode utilisait ActivePython sous Windows, mais que Windows ne le fait que parce qu'il utilise COM. Existe-t-il une méthode utilisant Python brut?

582
Jonathon Watney

Le module uuid, dans Python 2.5 et versions ultérieures, permet la génération d'UUID conforme à RFC. Voir la documentation du module et le RFC pour plus de détails. [ source ]

Docs:

Exemple (travaillant sur 2 et 3):

>>> import uuid
>>> uuid.uuid4()
UUID('bd65600d-8669-4903-8a14-af88203add38')
>>> str(uuid.uuid4())
'f50ec0b7-f960-400d-91f0-c42a6d44e3d0'
>>> uuid.uuid4().hex
'9fe2c4e93f654fdbb24c02b15259716c'
641
stuartd

Si vous utilisez Python 2.5 ou version ultérieure, le module uuid est déjà inclus avec le Python distribution standard.

Ex:

>>> import uuid
>>> uuid.uuid4()
UUID('5361a11b-615c-42bf-9bdb-e2c3790ada14')
317
Jay

Copié à partir de: https://docs.python.org/2/library/uuid.html (Les liens postés n'étant pas actifs, ils sont régulièrement mis à jour)

>>> import uuid

>>> # make a UUID based on the Host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

J'utilise des GUID comme clés aléatoires pour les opérations de type base de données.

La forme hexadécimale, avec les tirets et les caractères supplémentaires, me semble inutilement longue. Mais j'aime aussi le fait que les chaînes représentant des nombres hexadécimaux soient très sûres car elles ne contiennent pas de caractères qui peuvent causer des problèmes dans certaines situations telles que '+', '=', etc.

Au lieu de hexadécimal, j'utilise une chaîne base64 sécurisée pour l'URL. Toutefois, les éléments suivants ne sont conformes à aucune spécification UUID/GUID (à part le fait d’avoir la quantité aléatoire requise).

import base64
import uuid

# get a UUID - URL safe, Base64
def get_a_uuid():
    r_uuid = base64.urlsafe_b64encode(uuid.uuid4().bytes)
    return r_uuid.replace('=', '')
28
Chris Dutrow

Cette fonction est entièrement configurable et génère un ID utilisateur unique basé sur le format spécifié.

par exemple: - [8, 4, 4, 4, 12], c’est le format mentionné et il générera l’uuid suivant

LxoYNyXe-7hbQ-caJt-DSdU-PDAht56cMEWi

 import random as r

 def generate_uuid():
        random_string = ''
        random_str_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        uuid_format = [8, 4, 4, 4, 12]
        for n in uuid_format:
            for i in range(0,n):
                random_string += str(random_str_seq[r.randint(0, len(random_str_seq) - 1)])
            if n != 12:
                random_string += '-'
        return random_string
2
Manoj Selvin

Si vous devez transmettre UUID pour une clé primaire pour votre modèle ou un champ unique, le code ci-dessous renvoie l'objet UUID -

 import uuid
 uuid.uuid4()

Si vous devez passer UUID en tant que paramètre pour une URL, vous pouvez procéder comme suit:

import uuid
str(uuid.uuid4())

Si vous voulez la valeur hexadécimale pour un UUID, vous pouvez faire la suivante -

import uuid    
uuid.uuid4().hex
2
Mobasshir Bhuiyan