Hướng dẫn python uuid duplicate - bản sao python uuid
Tôi đang sử dụng chức năng UUID của Python để tạo ID duy nhất cho các đối tượng được lưu trữ trong cơ sở dữ liệu:
Có ổn không khi cho rằng đây thực sự là một ID duy nhất? Hoặc tôi nên kiểm tra kỹ rằng ID duy nhất này chưa được tạo đối với cơ sở dữ liệu của tôi trước khi chấp nhận nó là hợp lệ. Đã hỏi ngày 1 tháng 6 năm 2014 lúc 18:30Jun 1, 2014 at 18:30
3 Tôi sẽ sử dụng Bạn thực sự có thể đảo ngược giá trị UUID1 để truy xuất thời gian kỷ nguyên ban đầu được sử dụng để tạo ra nó.
Đã trả lời ngày 1 tháng 6 năm 2014 lúc 18:38Jun 1, 2014 at 18:38
Martin Konecnymartin KonecnyMartin Konecny 55,7K19 Huy hiệu vàng134 Huy hiệu bạc151 Huy hiệu đồng19 gold badges134 silver badges151 bronze badges 1 Bạn nên luôn luôn có một kiểm tra trùng lặp, mặc dù tỷ lệ cược là khá tốt, bạn luôn có thể có các bản sao. Tôi sẽ khuyên bạn chỉ nên thêm một ràng buộc khóa trùng lặp trong cơ sở dữ liệu của bạn và trong trường hợp thử lại lỗi. Đã trả lời ngày 1 tháng 6 năm 2014 lúc 18:37Jun 1, 2014 at 18:37
WolphwolphWolph 76.1K10 Huy hiệu vàng132 Huy hiệu bạc147 Huy hiệu đồng10 gold badges132 silver badges147 bronze badges Miễn là bạn tạo tất cả các UUID trên cùng một hệ thống, trừ khi có một lỗ hổng rất nghiêm trọng trong việc thực hiện Python (điều mà tôi thực sự không thể tưởng tượng), RFC 4122 nói rằng tất cả chúng sẽ khác biệt (chỉnh sửa: nếu sử dụng phiên bản 1,3 hoặc 5) .cannot imagine), RFC 4122 states that they will all be distinct (edited : if using version 1,3 or 5). Vấn đề duy nhất có thể phát sinh với UUID, là nếu hai hệ thống tạo UUID chính xác vào cùng một thời điểm và:
Vì vậy, nếu bạn có địa chỉ MAC thực hoặc sử dụng tên DNS chính thức hoặc LDAP DN duy nhất, bạn có thể thực hiện đúng rằng các UUID được tạo sẽ là duy nhất trên toàn cầu. Vì vậy, IMHO, bạn chỉ phải kiểm tra Unicity nếu bạn muốn ngăn chặn ứng dụng của mình chống lại một cuộc tấn công độc hại khi cố gắng tự nguyện sử dụng UUID tồn tại. Chỉnh sửa: Như Martin Konecny đã nêu, trong UUID4, phần Dấu thời gian cũng là ngẫu nhiên và không đơn điệu. Vì vậy, sở hữu là va chạm rất hạn chế nhưng không phải 0.very limited but not 0. Đã trả lời ngày 1 tháng 6 năm 2014 lúc 18:51Jun 1, 2014 at 18:51
Serge Ballestaserge BallestaSerge Ballesta Huy hiệu vàng 139K1111 gold badges115 silver badges235 bronze badges Mã nguồn: lib/uuid.py Lib/uuid.py Lib/uuid.py Mô -đun này cung cấp các đối tượng Nếu tất cả những gì bạn muốn là một ID duy nhất, có lẽ bạn nên gọi >>> 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 b'\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')0. Lưu ý rằng uuid1() có thể thỏa hiệp quyền riêng tư vì nó tạo ra UUID chứa địa chỉ mạng máy tính. >>> 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 b'\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')0 tạo ra một UUID ngẫu nhiên. Tùy thuộc vào sự hỗ trợ từ nền tảng cơ bản, >>> 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 b'\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')4 chuyển tiếp bất kỳ thông tin nào về sự an toàn của UUID, sử dụng bảng liệt kê này: Lớp ________ 15 ________ 16¶ Mới trong phiên bản 3.7. ________ 17¶UUID được tạo bởi nền tảng theo cách an toàn đa xử lý.()¶ ________ 18¶RFC 4122. “Hardware address” means the MAC address of a network interface. On a machine with multiple network interfaces, universally administered MAC addresses (i.e. where the second least significant bit of the first octet is unset) will be preferred over locally administered MAC addresses, but with no other ordering guarantees.UUID không được tạo ra theo cách an toàn đa xử lý.Universally administered MAC addresses are preferred over locally administered MAC addresses, since the former are guaranteed to be globally unique, while the latter are not. ________ 15 ________ 63 (Node = none, clock_seq = none) ¶(node=None, clock_seq=None)¶Tạo UUID từ ID máy chủ, số thứ tự và thời gian hiện tại. Nếu nút không được cung cấp, >>> 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 b'\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')04 được sử dụng để có được địa chỉ phần cứng. Nếu clock_seq được đưa ra, nó được sử dụng làm số thứ tự; Nếu không, một số chuỗi 14 bit ngẫu nhiên được chọn. ________ 15 ________ 66 (không gian tên, tên)(namespace, name)¶(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)¶ Tạo UUID dựa trên băm MD5 của định danh không gian tên (là UUID) và một tên (là một chuỗi). UUID('{12345678-1234-5678-1234-567812345678}') UUID('12345678123456781234567812345678') UUID('urn:uuid:12345678-1234-5678-1234-567812345678') UUID(bytes=b'\x12\x34\x56\x78'*4) UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' + b'\x12\x34\x56\x78\x12\x34\x56\x78') UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678)) UUID(int=0x12345678123456781234567812345678) Chính xác một trong các hex, byte, byte_le, trường hoặc int phải được cung cấp. Đối số phiên bản là tùy chọn; Nếu được đưa ra, UUID kết quả sẽ có biến thể và số phiên bản của nó theo RFC 4122, ghi đè các bit trong hex, byte, byte_le, trường, hoặc int.RFC 4122, overriding bits in the given hex, bytes, bytes_le, fields, or int.RFC 4122, overriding bits in the given hex, bytes, bytes_le, fields, or int. So sánh các đối tượng UUID được thực hiện bằng cách so sánh các thuộc tính ____22 của chúng. So sánh với một đối tượng không thuộc UUID làm tăng
UUID dưới dạng chuỗi 16 byte (chứa sáu trường số nguyên theo thứ tự byte lớn). ________ 27 ________ 30¶UUID dưới dạng chuỗi 16 byte (với Time_Low, Time_Mid và Time_Hi_Version theo thứ tự byte endian nhỏ). ________ 27 ________ 32¶Một tuple của sáu trường số nguyên của UUID, cũng có sẵn dưới dạng sáu thuộc tính riêng lẻ và hai thuộc tính dẫn xuất:
UUID dưới dạng chuỗi thập lục phân 32 ký tự. ________ 27 ________ 44¶UUID dưới dạng số nguyên 128 bit. ________ 27 ________ 46¶UUID dưới dạng bình theo quy định trong RFC 4122.RFC 4122.RFC 4122. ________ 27 ________ 48¶Biến thể UUID, xác định bố cục bên trong của UUID. Đây sẽ là một trong những hằng số Số phiên bản UUID (1 đến 5, chỉ có ý nghĩa khi biến thể là Việc liệt kê Mới trong phiên bản 3.7. ________ 17¶ UUID được tạo bởi nền tảng theo cách an toàn đa xử lý.()¶()¶________ 18¶RFC 4122. “Hardware address” means the MAC address of a network interface. On a machine with multiple network interfaces, universally administered MAC addresses (i.e. where the second least significant bit of the first octet is unset) will be preferred over locally administered MAC addresses, but with no other ordering guarantees.RFC 4122. “Hardware address” means the MAC address of a network interface. On a machine with multiple network interfaces, universally administered MAC addresses (i.e. where the second least significant bit of the first octet is unset) will be preferred over locally administered MAC addresses, but with no other ordering guarantees. UUID không được tạo ra theo cách an toàn đa xử lý.Universally administered MAC addresses are preferred over locally administered MAC addresses, since the former are guaranteed to be globally unique, while the latter are not.Universally administered MAC addresses are preferred over locally administered MAC addresses, since the former are guaranteed to be globally unique, while the latter are not. ________ 15 ________ 63 (Node = none, clock_seq = none) ¶(node=None, clock_seq=None)¶(node=None, clock_seq=None)¶Tạo UUID từ ID máy chủ, số thứ tự và thời gian hiện tại. Nếu nút không được cung cấp, >>> 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 b'\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')04 được sử dụng để có được địa chỉ phần cứng. Nếu clock_seq được đưa ra, nó được sử dụng làm số thứ tự; Nếu không, một số chuỗi 14 bit ngẫu nhiên được chọn. ________ 15 ________ 66 (không gian tên, tên)(namespace, name)¶(namespace, name)¶ Tạo UUID dựa trên băm MD5 của định danh không gian tên (là UUID) và một tên (là một chuỗi). ________ 15 ________ 68 ()()¶()¶Tạo UUID ngẫu nhiên. ________ 15 ________ 70 (không gian tên, tên)(namespace, name)¶(namespace, name)¶Tạo UUID dựa trên băm SHA-1 của định danh không gian tên (là UUID) và một tên (là một chuỗi). Mô -đun >>> 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 b'\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')1. ________ 15 ________ 75¶ Khi không gian tên này được chỉ định, chuỗi tên là một tên miền đủ điều kiện. ________ 15 ________ 77¶Khi không gian tên này được chỉ định, chuỗi tên là URL. ________ 15 ________ 79¶Khi không gian tên này được chỉ định, chuỗi tên là một iso oid. ________ 15 ________ 81¶Khi không gian tên này được chỉ định, chuỗi tên là X.500 DN ở định dạng đầu ra văn bản. Mô -đun Dành riêng cho khả năng tương thích NCS. ________ 15 ________ 87¶Chỉ định bố cục UUID được đưa ra trong RFC 4122.RFC 4122.RFC 4122. ________ 15 ________ 89¶Dành cho khả năng tương thích của Microsoft. ________ 15 ________ 91¶Dành riêng cho định nghĩa trong tương lai. Xem thêm RFC 4122 - Một không gian tên định danh độc đáo (UUID) phổ biến - A Universally Unique IDentifier (UUID) URN Namespace - A Universally Unique IDentifier (UUID) URN NamespaceThông số kỹ thuật này xác định một tên tên tên tài nguyên thống nhất cho UUID, định dạng nội bộ của UUID và các phương thức tạo UUID. Thí dụ¶Dưới đây là một số ví dụ về cách sử dụng điển hình của mô -đun >>> 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 b'\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') |