জ্যাঙ্গো কোয়েরি - আইডি বনাম পিকে


202

জ্যাঙ্গো কোয়েরি লেখার সময় কেউ আইডি / পিকে উভয়ই ক্যোয়ারী প্যারামিটার হিসাবে ব্যবহার করতে পারে।

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

আমি জানি যে পিকে প্রাইমারী কী বোঝায় এবং জাঙ্গোর ডকুমেন্টেশন অনুসারে এটি একটি শর্টকাট। তবে আইডি বা পিকে কখন ব্যবহার করা উচিত তা পরিষ্কার নয়।


এখানে যে নিজ নিজ docmentation হল: জন্যid এবং জন্যpk
Lutz Prechelt


এটির জন্য আরও কিছু আছে কিনা তা জানতে চান ডকস.ডজ্যাঙ্গোপ্রজেক্ট
রাজন চৌহান

এখানে আপডেট সংস্করণ পরীক্ষা করুন ডকস.ডজ্যাঙ্গোপ্রজেক্ট
এএন /

উত্তর:


224

এটা কোন ব্যাপার না। pkঅর্থাত আপনি যত্ন করা হবে কিনা তা প্রাথমিক কী ক্ষেত্র বলা হয় প্রয়োজন হবে না প্রকৃত প্রাথমিক কী ক্ষেত্র থেকে আরো স্বাধীন idবা object_idবা যাই হোক না কেন।

আপনার যদি বিভিন্ন প্রাথমিক কী ক্ষেত্রের মডেল থাকে তবে এটি আরও বেশি ধারাবাহিকতা সরবরাহ করে।


34
হাঁ। শুধু পিকে ব্যবহার করুন। সর্বদা.
চিত্তেগীক

47
idপাইথনের একটি অন্তর্নির্মিত ফাংশন, আমি এর কারণে পিকে ব্যবহার করতে পছন্দ করি।
থিয়েরি ল্যাম

5
হ্যাঁ, pkভাল। পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে বিল্ট-ইন ফাংশনের ডকুমেন্টেশনid দেখুন । (এটি পাইথন 2 একই ।)
Lutz Prechelt

25

জ্যাঙ্গো প্রকল্পগুলিতে যেখানে আমি জানি যে ফাংশনটির সাথে সংঘর্ষ না ঘটে সে ক্ষেত্রে pkসর্বদা idআমি ফিরে আসতে পছন্দ করি (পরিবর্তনশীল নাম বাদে সর্বত্র)। এর কারণটি হ'ল এটি এমন একটি সম্পত্তি যা এট্রিবিটির নাম অনুসন্ধান করতে সময় লাগে তার চেয়ে attrib গুণ ধীর ।idid()pkidpkmeta

%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শর্টকাট ব্যবহার করবেন কিনা তা বেছে নেওয়া আপনার পক্ষে । আপনি যদি জ্যাঙ্গোর জন্য একটি লাইব্রেরি বিকাশ করছেন না এবং সমস্ত মডেলের জন্য স্বয়ংক্রিয় প্রাথমিক কী ক্ষেত্রগুলি ব্যবহার করছেন তবে এটি idসর্বত্র ব্যবহার করা নিরাপদ , যা কখনও কখনও দ্রুত হয়। অন্যদিকে, যদি আপনি প্রাথমিক কী ক্ষেত্রগুলিতে (সম্ভবত কাস্টম) সর্বজনীন অ্যাক্সেস চান তবে pkসর্বত্র ব্যবহার করুন । মাইক্রোসেকেন্ডের এক তৃতীয়াংশ ওয়েবের জন্য কিছুই নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.