نوشتن Query های SQL با Django (قسمت اول[مقدمه])

در این مطلب و مطالب آتی اصلاً کاری نداریم که ORM چیست و چرا باید از آن استفاده کرد. بلکه فقط قصد بر این است که هر query که وجود دارد معادل آن را با Django ORM پیاده کنیم. ممکن است خواننده این شماره بگوید: “خیلی از مسایل را به طور پیش‌فرض به خود خواننده واگذار کرده است”. اما قرار نیست از شماره بعد چنین باشد.

Django Framework

برای dataset از dataset کتاب Sams Teach Yourlself sql in 24 hours استفاده شده است که البته این dataset نواقصی دارد، اما برای مثال‌های ما کفایت می‌کند. این dataset را می‌توانید از اینجا دانلود کنید.

ایجاد مدل:

نکته: یک پروژه بسازید و در آن یک app با نام sql بسازید.

نکته: فایل‌های دانلود شده اولی برای ایجاد table‌ها و دومی برای INSERT کردن‌ داده‌ها می‌باشند.

نکته: ممکن است بگویید models.py را چگونه بسازم. فرمان manage.py یک command دارد با نام inspectdb که مدل مربوط به یک DB و یا یک Table را برایتان پرینت می‌کند.

نکته: فیلد managed را به True تغییر دهید تا بتواند برایتان جداول را ایجاد کند.

برای models.py آن کلاس‌های زیر را تعریف کنید:

 

سپس با فرمان‌های زیر جداول را ایجاد نمایید:

نکته: فرض بر این است که با ساخت جدول و تغییرات آن در خود Django آشنا هستید و نیازی به توضیح فایل models.py نیست.

نکته: فرض دیگر این است که با SQL به صورت کامل آشنا هستید.

نکته: فرض دیگر بر این است که شما با فایل settings.py کاملاً آشنایی دارید و هر چیزی را می‌توانید setup کنید.

نکته: فرض دیگر این است که شما با virtualenv آشنا هستید و می‌توانید آن را فعال و غیر فعال کنید.

آشنایی با QuerySet:

QuerySet یک data type با نام django.db.models.query.QuerySet است که مقادیر برگردانده شده از پایگاه داده را بر می‌گرداند. اگر یک نوع یک QuerySet را با تابع type پرینت بگیرید این چنین می‌شود:

نکته: ممکن است سوال پیش بیایید که EmployeePayTbl چیست. یکی از کلاس‌های فایل models.py می‌باشد، که اشاره به جدول EMPLOYEE_PAY_TBL دارد.

اگر  تابع بالا را پرینت بگیریم، خروجی‌اش نیز زیر آن آمده است.

اگر در شل SQL از جدول مذکور Select بگیریم، نتیجه زیر حاصل می‌شود:

سوالی که مطرح می‌شود این است که چرا فقط فیلد اول در QuerySet پرینت می‌شود. در پایتون تابعی با نام __str__ وجود دارد که می‌تواند داخل هر کلاسی override شود و نوع نمایش string خروجی را مشخص می‌کند. فرض می‌کنیم که بخواهیم فیلد POSITION را بخواهیم نمایش دهیم. در نتیجه این تابع را به کلاس اضافه می‌کنیم:

خروجی به صورت زیر می‌شود:

نکته: تابع all که در بالا مثال زده شد، یک QuerySet بر می‌گرداند که کل row های شما را شامل می‌شود.

به تکه کد زیر دقت کنید:

کل row های جدول برگشته شده را پرینت می‌کند:

در مطالب بعدی به صورت جدی به پیاده‌سازی انواع query در Django می‌پردازیم.

مطالب مربوط به ORM جنگو ادامه خواهند داشت. منتظر باشید.

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *