Создать уникальный номер в Python в пределах максимального ограничения Postgres тип данных bigint - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть проблема, в которой мне нужно найти уникальный номер в 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)

даже при приближении к нано секундам возвращаются дубликаты, но меньшее количество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...