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)
यहाँ प्रासंगिक Django कोड है:
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