Как генерировать уникальные 64-битные целые числа из Python

Некоторые rating возвращают null из-за left join

Попробуйте это

SELECT a.name,
  ROUND(AVG(CASE WHEN c.rating IS NULL THEN 1 ELSE c.rating END )) AS rating,
  a.etc,b.etc,a.personid
FROM person a
JOIN bid b ON b.personid=a.personid
LEFT JOIN rating c ON c.bidid=b.bidid
GROUP BY a.personid 

SQL Fiddle

32
задан Continuation 20 August 2010 в 11:09
поделиться

3 ответа

просто замаскируйте 128-битное int

>>> import uuid
>>> uuid.uuid4().int & (1<<64)-1
9518405196747027403L
>>> uuid.uuid4().int & (1<<64)-1
12558137269921983654L

Они более или менее случайны, так что у вас есть крошечный шанс столкновения

Возможно, безопаснее использовать первые 64 бита uuid1

>>> uuid.uuid1().int>>64
9392468011745350111L
>>> uuid.uuid1().int>>64
9407757923520418271L
>>> uuid.uuid1().int>>64
9418928317413528031L

Они в значительной степени основаны на часы, поэтому случайность гораздо меньше, но уникальность лучше

40
ответ дан 27 November 2019 в 20:21
поделиться

Вы можете использовать uuid4(), который генерирует один случайный 128-битный целочисленный UUID. Нам нужно 'двоичное правое смещение' (>>) каждого 128-битного целого числа, сгенерированного 64-битным (то есть 128 - (128 - 64)).

from uuid import uuid4

bit_size = 64
sized_unique_id = uuid4().int >> bit_size
print(sized_unique_id)
1
ответ дан Chuma Umenze 27 November 2019 в 20:21
поделиться

64 бита уникально

Что не так со счетом? Простой счетчик создаст уникальные значения. Это самый простой вариант, и вы можете быть уверены, что не будете повторять значение.

Или, если счет недостаточно хорош, попробуйте это.

>>> import random
>>> random.getrandbits(64)
5316191164430650570L

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

Конечно, вы можете сделать это неправильно и получить повторяющуюся последовательность случайных чисел. Следует проявлять особую осторожность при обращении с семенами для программы, которая запускается и останавливается.

23
ответ дан 27 November 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: