python如何实现MySQL中的UUID_TO_BIN()方法?

数据库中使用BINARY(16)来存储UUID_TO_BIN(UUID(),1)返回的结果并作为主键。
使用python,如何将uuid.uuid1()生成的UUID对象转换成与UUID_TO_BIN()对应的结果?

import uuid

source_uuid = uuid.uuid1()

# a498ad34-9426-11ed-81bd-28d2441b950f <class 'uuid.UUID'> 36

str_uuid = str(uuid.uuid1()).replace('-', '')

sorted_uuid = str_uuid[12:16] + str_uuid[8:12] + str_uuid[0:8] + str_uuid[16:]

# 11ed9426a498ae1081bd28d2441b950f <class 'str'> 32

fromhex_uuid = bytes.fromhex(sorted_uuid)

# b'\x11\xed\x94&\xa4\x98\xae\x10\x81\xbd(\xd2D\x1b\x95\x0f' <class 'bytes'> 16

# 这个好像可以,但能不能把后边的反斜杠去掉呢?

encode_uuid = sorted_uuid.encode('utf-8')

# b'11ed9426a498ae1081bd28d2441b950f' <class 'bytes'> 32

python如何实现MySQL中的UUID_TO_BIN()方法?

哪位大神有好的方法呢?望不吝赐教!


回答:

数据库中保存的就是字节数据. 执行 字节.hex() 就是你要的16进制表示了.

bytes.fromhex('414243')b'abc'.hex()


回答:

在Python中,可以使用 built-in 模块 struct 来将 UUID 对象转换为二进制字符串。

import struct

import uuid

def uuid_to_bin(uuid_object):

return struct.pack('>QQ', uuid_object.int >> 64, uuid_object.int & ((1 << 64) - 1))

# Example usage

uuid_object = uuid.uuid1()

uuid_bin = uuid_to_bin(uuid_object)

上述代码生成的 uuid_bin 就是对应 UUID_TO_BIN(UUID(),1) 的结果,可以用来存储在数据库中的BINARY(16)字段中。

注意:如果需要存储在数据库中的UUID是小端序,可以使用struct.pack('<QQ', uuid_object.int >> 64, uuid_object.int & ((1 << 64) - 1))

以上是 python如何实现MySQL中的UUID_TO_BIN()方法? 的全部内容, 来源链接: utcz.com/p/938721.html

回到顶部