当前位置: 首页 > 编程笔记 >

Python通用唯一标识符uuid模块使用案例

戎兴言
2023-03-14
本文向大家介绍Python通用唯一标识符uuid模块使用案例,包括了Python通用唯一标识符uuid模块使用案例的使用技巧和注意事项,需要的朋友参考一下

1. 背景知识:

  UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生成ID的唯一性, 有着固定的大小( 128 bit ). 它的唯一性和一致性特点使得可以无需注册过程就能够产生一个新的UUID. UUID可以被用作多种用途, 既可以用来短时间内标记一个对象, 也可以可靠的辨别网络中的持久性对象.

  为什么要使用UUID?

  很多应用场景需要一个id, 但是又不要求这个id 有具体的意义, 仅仅用来标识一个对象. 常见的例子有数据库表的id 字段. 另一个例子是前端的各种UI库, 因为它们通常需要动态创建各种UI元素, 这些元素需要唯一的id , 这时候就需要使用UUID了.

2. Python的uuid模块

  python的uuid模块提供UUID类和函数uuid1(), uuid3(), uuid4(), uuid5() 来生成1, 3, 4, 5各个版本的UUID ( 需要注意的是: python中没有uuid2()这个函数). 对uuid模块中最常用的几个函数总结如下:

  1. uuid.uuid1([node[, clock_seq]]) : 基于时间戳

  使用主机ID, 序列号, 和当前时间来生成UUID, 可保证全球范围的唯一性. 但由于使用该方法生成的UUID中包含有主机的网络地址, 因此可能危及隐私. 该函数有两个参数, 如果 node 参数未指定, 系统将会自动调用 getnode() 函数来获取主机的硬件地址. 如果 clock_seq 参数未指定系统会使用一个随机产生的14位序列号来代替.

  2. uuid.uuid3(namespace, name) : 基于名字的MD5散列值

  通过计算命名空间和名字的MD5散列值来生成UUID, 可以保证同一命名空间中不同名字的唯一性和不同命名空间的唯一性, 但同一命名空间的同一名字生成的UUID相同.

  4. uuid.uuid4() : 基于随机数

  通过随机数来生成UUID. 使用的是伪随机数有一定的重复概率.

  5. uuid.uuid5(namespace, name) : 基于名字的SHA-1散列值

  通过计算命名空间和名字的SHA-1散列值来生成UUID, 算法与 uuid.uuid3() 相同.

3. uuid模块的典型使用方法:

>>> 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')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我有一个包含以下各列的mysql表: 我想使其不存在任何两行,其中行x的group_id的值等于行y的group_id的值,行x的user_id的值也等于行y的user_id的值。 因此,例如,假设我插入以下值: 上面的数据,即使一个mysql查询试图插入它,如果已经存在具有group_id和user_id相同组合的行,也不应创建新行。有没有办法做到这一点?基本上,我试图使两列协同工作

  • 本文向大家介绍Python字符串hashlib加密模块使用案例,包括了Python字符串hashlib加密模块使用案例的使用技巧和注意事项,需要的朋友参考一下 主要用于对字符串的加密,最常用的为MD5加密: 如果要避免撞库的行为,可以加盐将加密数值改为更加复杂的,这样破译起来更加不容易。  案例: 说明:用户输入新建的用户名和密码,以MD5加密的形式存入文件中。再让用户输入用户名密码进行匹配。 以

  • 唯一标识符 guid(length = 32, firstU = true, radix = 62) 该函数可以生产一个全局唯一、随机的guid,默认首字母为u,可以用于当做元素的id或者class名等需要唯一,随机字符串的地方,因为id或者class不能以数字开头。 length <Number | null> guid的长度,默认为32,如果取值null,则按rfc4122标准生成对应格式的随

  • 问题内容: 这将类似于该方法。 我需要将无法控制的对象存储在一个集中,并确保只有两个对象实际上是同一对象(不包含相同的值)时,这些值才会被覆盖。 问题答案: 会帮你的忙。但我很好奇,对象集(按值组合对象)有什么问题? 对于您的特定问题,我可能会保留一组ID或包装对象。包装对象将包含一个引用,并按<==>进行比较。 还值得注意的是,Python对象也具有功能。该功能对于将对象放入集合或字典是必需的。

  • 本文向大家介绍python uuid生成唯一id或str的最简单案例,包括了python uuid生成唯一id或str的最简单案例的使用技巧和注意事项,需要的朋友参考一下 介绍: UUID是128位的全局唯一标识符,通常由32字节的字符串表示。 使用: uuid1()——基于MAC地址、当前时间戳、随机数生成。 uuid3()——基于名字的MD5散列值。 uuid4()——基于随机数,有一定的重复

  • 问题内容: TLDR;如何在基于事件的编程模型中标识套接字。 我刚刚开始使用node.js,过去我在C ++和PHP sockets()中完成了大部分编码工作,所以node.js对我来说是非常新的东西。 在c ++中,我们可以通过编写主套接字(例如服务器)来侦听新的连接和更改,然后相应地处理这些连接,从而完成识别套接字的工作。 问题答案: 如果您在寻找实际的套接字而不是socket.io,那么它们