У проектах Django, де я знаю, що pk
завжди повертається, id
я вважаю за краще використовувати, id
коли він не стикається з id()
функцією (скрізь, крім імен змінних). Причиною цього є те, що pk
це властивість, яка в 7 разів повільніше, ніж id
потрібен час для пошуку pk
імені атрибута в meta
.
%timeit obj.id
46 ns ± 0.187 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit obj.pk
347 ns ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Ось відповідний код Джанго:
def _get_pk_val(self, meta=None):
meta = meta or self._meta
return getattr(self, meta.pk.attname)
def _set_pk_val(self, value):
return setattr(self, self._meta.pk.attname, value)
pk = property(_get_pk_val, _set_pk_val)
Це дійсно рідкісний випадок, коли мені потрібно використовувати змінну на ім'я pk
. Я вважаю за краще використовувати щось більш багатослівне, як user_id
замість pk
.
Дотримуватися тієї ж конвенції є кращим у всьому проекті. У вашому випадку id
це ім'я параметра, а не властивість, тому різниці в таймінгах майже немає. Назви параметрів не суперечать імені вбудованої id()
функції, тому тут безпечно використовувати id
.
Підводячи підсумок, ви вирішите вибрати, чи використовувати ім'я поля id
чи pk
ярлик. Якщо ви не розробляєте бібліотеку для Django і використовуєте автоматичні поля первинного ключа для всіх моделей, це безпечно використовувати id
всюди, що іноді відбувається швидше. З іншого боку, якщо ви хочете отримати універсальний доступ до (ймовірно, спеціальних) полів первинного ключа, тоді використовуйте pk
всюди. Третина мікросекунди - це нічого для Інтернету.
id
і дляpk