اذهب إلى المحتوى
  • 0

إستخدام id و pk في إستعلامات جانغو Django

Amer Abdallah

السؤال

عند كتابة استعلامات في جانغو Django، يمكنني أن استخدام أي من id أو  pk كمعلمات استعلام، كالتالي.

Model.objects.get(id=1)
Model.objects.get(pk=1)

أعلم أن pk تعني المفتاح الأساسي وهو اختصار لـ primary key، ,ولكن ليس من الواضح متى يجب استخدام id ومتى أستخدم pk؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

في الحقيقة لا يهم أي منهما تستخدم فسوف تحصل على نفس النتيجة في النهاية. ولكن pk عام أكثر ، لأنك لن تضطر لمعرفة اسم المفتاح الأساسي primary key في الجدول، أي أنك لست بحاجة إلى الاهتمام بما إذا كان حقل المفتاح الأساسي يسمى id أو user_id .. إلخ. كما أنه يوفر مزيدًا من التناسق إذا كان لديك نماذج ذات حقول مفاتيح أساسية مختلفة، حيث سوف تستخدم نفس الصيغة في كتابة الإستعلامات، ولن تضطر لتذكر المفتاح الأساسي لكل نموذج model. لذلك يفضل أن تستخدم pk بدلًا من id في الحالات العامة.

لاحظ أيضًا أن id يعد دالة built-in في بايثون، وقد يكون هذا سبب في ظهور خطأ، إن قمت بخلط أسماء المتغيرات والدوال معًا.

على الجانب الآخر، قد يكون إستخدام id أسرع من إستخدام pk، وذلك لأن جانغو Django يستغرق وقت في معرفة اسم الحقل الرئيسي عندما تستعمل pk، بينما إن إستعملت id فأنت تستعمل اسم الحقل مباشرة، ولن يضطر  جانغو Django إلى معرفة اسم الحقل لأنك أخبرته به بالفعل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

ببساطة pk هي المميز الخاص بالبيانات عن id ، لكن بوجة عام لا فرق كبير بينهما، لكن يفضل استخدام id  عن pk حيث انها أسرع بحوالي 7 مرات، أنظر المثال التالي:

%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)

لكن لو استخدمت pk فهي تجلب لك العناصر المميزة دون أن يكون اسمها id ام لا، وهذا ما يجعله أبطأ في الاستخدام.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...