У меня есть проблема, в которой мне нужно найти уникальный номер в python и сохранить его в базе данных в PostgreSQL. Каждый раз, когда он должен генерировать уникальный номер (то есть не должен повторяться)
Также мне нужно добавить один префикс к уникальному номеру:
Решение, которое я пробовал до сих пор:
import time
def generate_unique_reference_number(order_type_id=28):
order_type_prefix = '{:<02}'.format(order_type_id) # 2 digit
current_time = str(int(time.time() * 1000000)) # 16 digit
return int(order_type_prefix + current_time)
numbers = []
numbers_set = set()
for i in range(10000):
num = generate_unique_reference_number(28)
numbers.append(num)
numbers_set.add(num)
print(len(numbers))
print(len(numbers_set))
print(len(numbers) - len(numbers_set))
Это все еще дает мне повторяющиеся значения.
Максимальный лимит для bigint на postgres сервере:
-9223372036854775808 to 9223372036854775807
Я могу использовать нано секунды (то есть предел в 19 цифр такой же, как postgres), но мне нужно добавить префикс: Также 2 цифры.
def generate_unique_reference_number(order_type_id=28):
current_time = str(int(time.time_ns())) # 19 digit
return int(current_time)
даже при приближении к нано секундам возвращаются дубликаты, но меньшее количество.