• چهارشنبه ۳۰ آبان ۱۴۰۳
نویسنده : سید طه آیت اللهی
آخرین آپدیت : 1400/08/28
زمان مورد نیاز برای خواندن : 10

آموزش کار با دیتابیس و ساخت جدول ها در فریمورک جنگو(django) | tmayt

آموزش کار با دیتابیس و ساخت جدول ها در فریمورک جنگو(django)

برای شناخت دیتابیس ها میتوانید تعاریف زیادی در اینترنت پیدا کنید که انواع مختلف آن را توضیح میدهد و میتوانید باشکل های آن آشنا شوید در جنگو دیتابیس به صورت پیشفرض یک فایل میباشد که کاری که درواقع انجام میدهد مانند هر دیتابیس دیگری ذخیره سازی داده ها در جدول هایی از قبل تعریف شده است 

شما در هر دیتابیس به تعداد بی شماری میتوانید جدول با تعداد ستون دلخواه بسازید و در آن داده های خود را قرار دهید برای مثال برحسب نیاز شما میتوانید برای اطلاعات مربوط به محصولات یک سایت فروشگاهی یک جدول به نام Product بسازید و در آن ستون های خود را : نام محصول ، قیمت محصول ، آدرس تصویر محصول در سرور ، دسته بندی و ... قرار دهید و در ازای هر محصولی که به سایت قرار است اضافه شود یک ردیف به جدول خود اضافه کنید.

با اینکار به راحتی میتوانید داده های اصلی وب سایت خود رو به راحتی مدیریت و در یک فایل دیتابیسی به صورت مرتب داشته باشید و هر زمان که به این داده ها احتیاج داشتید به راحتی با چند دستور آنها را استخراج و استفاده کنید.

دیتابیس ها در جنگو به چه شکلی کار میکنند؟ 

برای کار با دیتابیس هایی مانند sqlite3  باید از کوئری های sql استفاده کرده تا بتوان با آنها در دیتابیس تغیر یا استخراج کرد داده ای رو ، اما استفاده از کوئری های sql در پایتون حین کد زدن شما برای سایت کمی دشوار است برای همین در جنگو یک سیستم orm  در نظر گرفته اند که میتوان خیلی راحت به شما دسترسی به دیتابیس را بدهد و تمام کار هایی که نیاز دارید را با آن انجام دهید این orm و کار با دیتابیس در جنگو به صورت اساسی از مفهوم شئ گرایی کمک میگیرد، اگر با مفهوم شئ گرایی آشنا نیستید میتوانید همه چیز در پایتون یک شئ است!! | tmayt را مطالعه کنید .

اگر به پروژه جنگو نگاه کنید میتوانید فایل db.sqlite3 رو در کنار فایل manage.py ببینید، اگر فایل وجود نداشت با وارد کردن دستور python manage.py migrate در محیط cmd در مسیر پروژه این فایل ساخته میشود ، این همان فایلی است که جدول ها در آن ساخته میشود.

در تمامی app هایی که ساخته میشود در پروژه یک فایلی وجود دارد به نام models.py .

این فایل در اصل برای ساختن جدول ها میباشد . حال اگر سایت خود را یک سایت فروشگاهی در نظر بگیریم نیاز به یک جدول برای مشخصات محصول داریم .

همانطور که هر متغیر در زبان های برنامه نویسی دارای یک type هستند ، در دیتابیس هم هر ستون از جدول برای خود type ای مشخص دارد که مشخص میکند چه نوع داده ای در آن ستون قرار خواهد گرفت.

وارد فایل models.py میشویم و میخواهیم اولین مدل خود را بسازیم . برای این کار کد کلاس با نام دلخواه قرار میدهیم و به کمک ارثبری ویژگی های کلاس از قبل تعریف شده ی مدل در آدرس django.db.models را به این کلاس جدید میدهیم.  ، اگر با ارث بری آشنا نیستید می توانید مقاله ی مفهوم وراثت در زبان برنامه نویسی پایتون | tmayt  را مطالعه کنید.

نام کلاس ما همان نام جدول در دیتابیس خواهد شد.

خب برای ساختن ستون ها اول اسم و نوع آنها را باید مشخص کنیم. برای یک محصول نیاز به اطلاعات :

  • قیمت
  • توضیحات
  • سرتیتر
  • عکس
  • ...

داریم. برای قرار دادن همین فیلد ها یا همان ستون ها باید از فیلدهای تعریف شده درکلاس models استفاده کنیم و متغیر های هرستون جدول را با یک نام متغیر بسازیم.

در مثالی که باهم جلو میرفتیم برای قیمت از  IntegerField ، برای توضیحات از TextField ، برای سرتیتر از CharField و برای عکس نیز از ImageField ، استفاده میکنیم.

class Product(models.Model):
    price = models.IntegerField()
    description = models.TextField()
    title = models.CharField(max_length= 200)
    image = models.ImageField(upload_to = "product")

برای ImageField نیاز به کتابخانه ی pillow داریم . برای نصب آن از دستور pip install pillow استفاده کنید . 

در این حالت جدول ما به این شکل میشود : 

جدول دیتابیس | جنگو

لیست تمامی فیلدهای دیتابیس 

برای دیدن لیست تمام فیلد ها میتوانید به راحتی داکیومنت اصلی جنگو را مطالعه و با فیلد ها آشنا شوید و به راحتی از آنها استفاده کنید.

Model field reference | Django documentation | Django (djangoproject.com)

دستور migrate در جنگو چه کاری انجام میدهد؟

حال ما یک مدل برای محصولاتمان داریم ، اما این کد پایتونی که نوشتیم روی دیتابیس باید اعمال شود ، برای این کار در محیط cmd خود در آدرس پروژه دستور python manage.py makemigrations را وارد میکنیم ، با این کار یک پوشه در کنار models.py در app ما ساخته میشود به نام migrations که این پوشه حاوی فایل هایی است که orm دستورات پایتونی مارا برای دستورات sql آماده میکند و بعد از دستور قبلی با وارد کردن python manage.py migrate میتوانیم این دستورات را روی فایل db.sqlite3  اجرا کنیم.

پس از این دو دستور داخل دیتابیس جدول محصولات ما قرار میگیرد. حال میتوانیم به این جدول ، محصولات خودمان را اضافه کنیم. 

چگونه میتوان به مدل جنگو یک ردیف اضافه کرد؟

برای این کار باید از منیجر دیتابیس استفاده کرد که با نام objects خوانده میشود .

هرمدل ما ، یک کلاس پایتونی میباشد که میتوان آن را در کدهای مختلف import کرد. اگر با import آشنایی ندارید میتوانید آشنایی و کار با کتابخانه ها یا همان ماژول ها در پایتون | tmayt را بخوانید .

برای تست ما میتوانیم از محیط shell جنگو برای اجرای کدهای پایتونی خود استفاده کنیم.

با دستور python manage.py shell یک محیط کار پایتونی باز میکنیم و با دستور from home.models import Product مدل خود را import میکنیم ، سپس با دستور Product.objects.create () میتوانیم محصول خودرا در جدول بسازیم. و به تابع create در منیجر دیتابیس خودمان که همان objects است به عنوان ورودی مقادیر ستون هارا بدهیم.

python manage.py shell | django

پس از اجراشدن این خط کد یک ردیف به جدول ما اضافه شده و جدول ما به شکل زیر میشود : 

جدول دیتابیس | جنگو

انواع دستوراتی که میتوان به کمک orm جنگو و objects انجام داد

گرفتن فقط یک آبجکت از دیتابیس 

شما با دستور get() و قرار دادن شرایط خود به عنوان ورودی این تابع میتوانید آن آبجکت را از دیتابیس فراخوانی کرده و در یک متغیر بریزید

در مثال بالا :

my_product = Product.objects.get(title="my product name")

گرفتن همه ی آبجکت های جدول به صورت یک مجموعه 

شما میتوانید با دستور all() همه ی ردیف ها و همه ی آبجکت ها را به صورت یک مجموعه استخراج و در یک متغیر ذخیره کنید.

products = Product.objects.all()

فیلتر کردن آبجکت های دیتابیس 

شما میتوانید با دستور filter() به یک مدل بگویید فقط آنهایی که مقدار مشخصی دارند رو برای من استخراج کن.

products = Product.objects.filter(description="my text")

ساخت یک آبجکت جدید در دیتابیس

برای ساخت یک آبجکت جدید در دیتابیس از دستور create() استفاده میکنیم و مقادیر داخل جدول خود رو به عنوان ورودی به آن میدهیم 

 

آموزش بعدی ( آموزش کار با پنل ادمین جنگو واضافه کردن مدل های دیتابیس به پنل در فریمورک جنگو(django) | tmayt)

آموزش قبلی ( مفهوم mvt و قرار دادن template در پروژه در فریمورک جنگو(django) | tmayt)

نظرات(1)


علیرضا

مرسی خیلی کامل و ساده توضیح دادید


1400/09/13 پاسخ

نظر خود را وارد کنید