python如何实现MySQL中的UUID_TO_BIN()方法?
数据库中使用BINARY(16)来存储UUID_TO_BIN(UUID(),1)返回的结果并作为主键。
使用python,如何将uuid.uuid1()生成的UUID对象转换成与UUID_TO_BIN()对应的结果?
import uuidsource_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
哪位大神有好的方法呢?望不吝赐教!
回答:
数据库中保存的就是字节数据. 执行 字节.hex() 就是你要的16进制表示了.
bytes.fromhex('414243')
b'abc'.hex()
回答:
在Python中,可以使用 built-in 模块 struct 来将 UUID 对象转换为二进制字符串。
import structimport 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