Her pk
zaman döndürdüğünü bildiğim Django projelerinde , işlevle (değişken adları hariç her yerde) çakışmadığında id
kullanmayı tercih ederim . Bunun nedeni, öznitelik adını aramak zaman aldığı için 7 kat daha yavaş bir özellik olmasıdır .id
id()
pk
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)
İlgili Django kodu şöyledir:
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)
Adında bir değişken kullanmam gerektiğinde çok nadir görülen bir durumdur pk
. Bunun user_id
yerine daha ayrıntılı bir şey kullanmayı tercih ederim pk
.
Tüm projede aynı sözleşmeyi izlemek tercih edilir. Sizin durumunuzda id
bir özellik değil, bir parametre adı vardır, bu nedenle zamanlamalarda neredeyse hiçbir fark yoktur. Parametre adları yerleşik id()
işlevin adıyla çakışmaz , bu nedenle id
burada kullanmak güvenlidir .
Özetlemek gerekirse, alan adı id
mı yoksa pk
kısayol mu kullanacağınızı seçmek size kalmıştır . Django için bir kitaplık geliştirmiyorsanız ve tüm modeller için otomatik birincil anahtar alanları kullanıyorsanız, id
her yerde kullanmak güvenlidir , bu da bazen daha hızlıdır. Diğer taraftan, birincil anahtar alanlarına (muhtemelen özel) evrensel erişim istiyorsanız, pk
her yerde kullanın . Mikrosaniyenin üçte biri web için bir şey değildir.
id
pk