
روز ۱۳: آشنایی با ORM در جنگو
یکی از مهمترین قابلیتهای جنگو، سیستم ORM یا Object-Relational Mapping است که به شما اجازه میدهد با استفاده از کد پایتون، دادهها را در پایگاه داده مدیریت کنید و نیاز به نوشتن مستقیم SQL نداشته باشید. ORM در جنگو رابطی بین مدلهای پایتون و جدولهای پایگاه داده فراهم میکند و تمام عملیات CRUD (ایجاد، خواندن، بهروزرسانی و حذف) را به صورت آبجکتمحور انجام میدهد. یادگیری درست ORM باعث میشود پروژه شما استاندارد، قابل توسعه و ایمن باشد و کار با دادهها بدون نیاز به نوشتن کوئریهای پیچیده SQL انجام شود. در این روز از دوره آموزش جنگو، با ساختار ORM، مدلها و عملیات پایهای روی دادهها آشنا میشویم.
مدلها در جنگو و ارتباط آنها با جداول پایگاه داده
مدلها در جنگو کلاسهایی هستند که نماینده جدولهای پایگاه داده هستند. هر کلاس مدل شامل فیلدهایی است که نوع دادهها و ویژگیهای ستونهای جدول را تعریف میکنند. این کلاسها به شما امکان میدهند دادهها را با کدنویسی پایتون مدیریت کنید و نیازی به نوشتن SQL خام نیست. برای مثال، ایجاد یک مدل برای دورههای آموزشی شامل نام، توضیحات و تاریخ ایجاد است که با اجرای migrate، جدول متناظر در پایگاه داده ساخته میشود.
from django.db import models
class Course(models.Model):
name = models.CharField(max_length=200)
description = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.nameدر این مثال، کلاس Course نماینده جدول دورهها است و فیلدهای name، description و created_at ستونهای آن را مشخص میکنند. متد __str__ نیز برای نمایش مناسب شیء در پنل مدیریت استفاده میشود.
عملیات پایهای CRUD با ORM
ORM در جنگو امکان انجام عملیات CRUD را با متدهای ساده فراهم میکند. برای ایجاد رکورد جدید، کافی است شیء مدل را ساخته و متد save را فراخوانی کنیم. برای خواندن دادهها میتوان از متدهای all، filter و get استفاده کرد. به همین ترتیب، بهروزرسانی و حذف دادهها نیز با متدهای سادهای انجام میشود که خوانایی و نگهداری کد را بسیار آسان میکند.
# ایجاد رکورد جدید course = Course(name="Django پیشرفته", description="یادگیری مباحث پیشرفته Django") course.save() # خواندن رکوردها all_courses = Course.objects.all() django_course = Course.objects.get(name="Django پیشرفته") # بهروزرسانی رکورد django_course.description = "دوره کامل پیشرفته Django" django_course.save() # حذف رکورد django_course.delete()
این مثال نشان میدهد که تمام عملیات پایگاه داده با کد پایتون و بدون نوشتن SQL انجام میشود و مدیریت دادهها بسیار ساده و قابل فهم است.
فیلترها و QuerySetها در ORM
QuerySet یکی از مفاهیم کلیدی در ORM است که نتیجه هر عملیات جستجو را به صورت مجموعهای از اشیاء مدل ارائه میدهد. با استفاده از متدهای filter، exclude و order_by میتوان دادهها را بر اساس شرایط مختلف فیلتر و مرتب کرد. این قابلیت باعث میشود کوئریهای پیچیده نیز به صورت آبجکتمحور و قابل خواندن نوشته شوند.
# فیلتر کردن رکوردها
advanced_courses = Course.objects.filter(name__icontains="پیشرفته")
recent_courses = Course.objects.order_by('-created_at')[:5]در این مثال، رکوردهای شامل “پیشرفته” فیلتر شده و پنج دوره اخیر مرتب شده بر اساس تاریخ ایجاد انتخاب میشوند. استفاده از QuerySet باعث افزایش انعطافپذیری و سرعت توسعه پروژه میشود.
روابط بین مدلها
جنگو ORM امکان تعریف روابط بین مدلها را نیز فراهم میکند، مانند OneToOne، ForeignKey و ManyToMany. این روابط به شما اجازه میدهند جداول مختلف پایگاه داده را به صورت منطقی به هم متصل کنید و عملیات مرتبط با آنها را به راحتی انجام دهید. این قابلیت در پروژههای واقعی برای مدیریت کاربران، دورهها، سفارشها و سایر دادههای مرتبط حیاتی است.
class Student(models.Model):
name = models.CharField(max_length=100)
courses = models.ManyToManyField(Course)در این مثال، هر دانشآموز میتواند چندین دوره را ثبتنام کند و ORM به طور خودکار جدول رابطهای لازم را ایجاد میکند.
مزایای استفاده از ORM در جنگو
استفاده از ORM مزایای زیادی دارد، از جمله کاهش نوشتن SQL پیچیده، افزایش خوانایی کد، قابلیت تست آسانتر و امنیت بالاتر در برابر حملات SQL Injection. همچنین ORM باعث میشود پروژه شما قابل توسعه باشد و تغییرات در مدلها به سادگی اعمال شوند بدون اینکه نیاز به تغییر مستقیم کوئریها باشد. این مزایا جنگو را برای پروژههای بزرگ و حرفهای بسیار مناسب میکند.
جمعبندی روز سیزدهم
در روز سیزدهم یاد گرفتیم ORM در جنگو چیست، چگونه مدلها را تعریف کنیم، عملیات CRUD را انجام دهیم و از QuerySet و روابط بین مدلها استفاده کنیم. تسلط بر ORM پایه تمام پروژههای حرفهای جنگو است و بدون آن، مدیریت دادهها در پروژههای واقعی دشوار و زمانبر خواهد بود. یادگیری و تمرین مفاهیم ORM باعث میشود توانایی ایجاد و مدیریت پایگاه داده به صورت حرفهای و استاندارد را داشته باشید و پروژههای جنگو شما ساختاریافته و قابل توسعه باقی بمانند.