استفاده از مدل های پایگاه داده در پایتون و جنگو | به زبان ساده


در این مقاله در خصوص استفاده از مدل های پایگاه داده در پایتون و جنگو توضیحاتی ارائه میکنیم. مراحل کار به شرح زیر هستند:
- ایجاد مدلهای جدید برای پردازش دادهها.
- افزودن مدلها به اینترفیس ادمین.
- ایجاد، ویرایش فیلتر و حذف اطلاعات در مدلها.
- ارتقای مدلها با خصوصیتها و متدها.
- یکپارچهسازی دادهها در اپلیکیشن.
ایجاد مدل پایگاه داده
در جنگو امکان ساخت مدلهای پایگاه داده با استفاده از کد پایتون وجود دارد.
به این منظور باید فایل models.py را درون پوشه اپلیکیشن (example/models.py) ایجاد کنید:
این کد موجب ایجاد 2 جدول به نامهای senders و messages میشود. در هر یک از این جدولها میتوان فیلدهایی را با استفاده از متدهای شیء models تعریف کرد.
- متد ()CharField برای فیلدهای متنی با یک «طول بیشینه» (max_length) تعریف شده.
- متد ()IntegerField برای مقادیر صحیح با یک مقدار default.
- متد ()DateTimeField برای ذخیرهسازی تاریخ/زمان.
متد str__(self)__ برای دریافت یک بازنمایی string از شیء استفاده میشود. در هر حالت میتوانید از فیلد یا ترکیبی از مقادیر استفاده کنید.
ایجاد و اجرای میگریشنها
اینک میتوانید جدولهای تعریف شده در فایل models.py را با ایجاد یک فایل migration ایجاد کنید. این فایل برای اجرای فرایند ایجاد هر جدول مورد استفاده قرار میگیرد.
python manage.py makemigrations
به این ترتیب یک فایل جدید به نام example/migrations/0001_initial.py ایجاد میشود که شامل دستورهایی برای ایجاد جداول است. گام بعدی اجرای میگریشن است:
python manage.py migrate
سپس جدولهای جدید در پایگاه داده SQLite ایجاد میشوند. اگر علاقهمند هستید ببینید کد میگریشن در SQL ساده به چه شکل است، میتوانید از دستور sqlmigrate زیر استفاده کنید:
python manage.py sqlmigrate example 0001
این دستور یک فهرست از دستورهای SQL نمایش میدهد:
توجه کنید که خروجی فوق ممکن است بسته به نسخههای مختلف پایگاه داده SQLite متفاوت باشد.
استفاده از عملیات پایگاه داده جنگو
به جای اجرای دستورهای خاص و پیچیده SQL میتوان با تابعهای پایگاه داده ارائه شده از سوی جنگو و پایتون کار کرد. به این ترتیب میتوانید یک کنسول خاص پایتون آغاز کنید که آماده کار با اپلیکیشن و مدلها است:
python manage.py shell
اکنون کنسولی دارید که دستورهای پایتون را اجرا میکند. برخی دستورهای مفید که میتوان اجرا کرد به صورت زیر هستند:
from example.models import Sender, Message from django.utils import timezone
خط اول اشیای Sender و Message مرتبط با جدولهای ایجاد شده در میگریشن را ایمپورت میکند. خط دوم شیء timezone را برای کار با عملیات تاریخ/زمان ایمپورت میکند.
ایجاد مدلها
این خطوط یک شیء Sender جدید ایجاد میکنند و مقادیر آنها را پر میکنند. سپس متد save() برای ذخیره این آیتم در پایگاه داده فراخوانده میشود. در نهایت sender یک ID جدید دارد که پایگاه داده آن را تعیین کرده است.
بهروزرسانی مدلها
sender.name = "Real Name" sender.save()
اینک این خطوط شیء sender را بهروزرسانی و برخی مقادیر را تعویض میکنند. فراخوانی متد ()save موجب بهروزرسانی این ردیف در پایگاه داده خواهد شد.
بازیابی و نمایش مدلها
>>> Sender.objects.all() <QuerySet [<Sender: Real Name [me@example.com]>]>
یک فراخوانی به صورت {ModelName}.objects().all موجب بازیابی لیست کامل اشیای ذخیره شده در پایگاه داده برای این مدل میشود. این دستور آخر یک توضیح ساده برای هر شیء را با استفاده از تابع Return در پایتون بازگشت میدهد. هر شیء مدل باید متد str_(self)_ را پیادهسازی کند تا پایتون بتواند این اطلاعات را به شیوهای قابل خواندن از سوی انسان نمایش هد.
فیلتر کردن مدلها
با استفاده از متد objects.filter(params) میتوانید انواع مختلفی از فیلترها را به شرح زیر اجرا کنید:
- field=value – یک فیلتر ساده که برابری مقادیر را بررسی میکند.
- field__startswith=txt – فیلتر متنهایی که با عبارت خاصی آغاز میشوند. به زیرخطهای دوتایی __ که فیلد. فیلتر را جدا میکنند توجه کنید.
- datefield__year=value – فیلتر کردن بر اساس بخشی از تاریخ (سال، ماه).
متد objects.get(params) برای بازیابی یک آیتم یکتا با استفاده از فیلتر استفاده میشود.
حذف کردن مدلها
sender = Sender.objects.get(pk=1) sender.delete()
استفاده از متد ()delete روی یک شیء مدل موجب حذف شدن آیتم از پایگاه داده خواهد شد.
گنجاندن مدلها در ماژول ادمین
با استفاده از کامپوننت django.contrib.admin امکان ایجاد صفحه مدیریت برای مدلها وجود دارد. کافی است فایل admin.py را در پوشه اپلیکیشن ویرایش کنید:
اکنون زمانی که سرور را با دستور زیر اجرا کنید:
python manage.py runserver
برخی گزینههای اضافی در اینترفیس مشاهده خواهید کرد:
ارتقای مدلها
در موارد زیادی لازم است که مدلها را ویرایش کرده یا بازتعریف و فیلدهای جدیدی اضافه کنیم و یا روابط آن را اضافه یا ویرایش نماییم. در این حالت، باید مدل Message را ارتقا دهید تا خصوصیتهای sender و recipient از یک رابطه با مدل Sender استفاده کنند. مدلهای اولیه شبیه زیر هستند:
در واقع sender و recipient فیلدهای نرمال نامرتبط با مدلهای دیگر هستند. ما این وضعیت را با ایجاد دو فیلد مرتبط در مدل sender تغییر میدهیم:
اکنون مدل Message با مدل Sender مرتبط است.
برای بهروزرسانی این مدلها و ایجاد میگریشنهای جدید در پروژه جدید بهتر است این سه گام را طی کنید:
- فایل db.sqlite3 را حذف کنید.
- میگریشن قبلی را در example/migrations/0001_initial.py حذف کنید.
- دستور python manage.py makemigrations را مجدداً اجرا کرده و یک فایل میگریشن جدید بسازید.
- دستور python manage.py migrate را برای اعمال میگریشن اجرا کنید.
در سطح پایگاه داده چه اتفاقاتی رخ میدهد؟
با اجرای دستور sqlmigrate میتوانیم ببینیم که در سطح پایگاه داده چه اتفاقهایی رخ میدهد:
python manage.py sqlmigrate example 0001
چنان که میبینید حجم کد SQL بالا است. پس از ایجاد جدولهای پایه یک توالی از دستورهای SQL وجود دارد که جدول را تغییر میدهند (ALTER TABLE)، روابط را اعلان کرده (REFERENCES) و اندیسها را اضافه میکنند (CREATE INDEX).
مدیریت مدلها در اینترفیس ادمین
اینک به بررسی تغییرات صورت گرفته روی Senders و Messages در اینترفیس ادمین میپردازیم. قبل از هر چیز باید دوباره super user را ایجاد کرده و سرور را آغاز کنیم.
- با اجرای دستور python manage.py createsuperuser کاربر ادمین ایجاد میشود.
- با اجرای دستور python manage.py runserver وبسرور اجرا میشود.
- با مراجعه به نشانی http://localhost:8000/admin/ میتوانید وارد حساب ادمین شوید.
اکنون برخی آیتمهای Senders را در اینترفیس ادمین ایجاد میکنیم:
سپس میتوانید یک مدل Senders ایجاد کنید. اکنون برای sender و recipient یک سلکتور برای Sender-های موجود در اختیار داریم. متن هر عنصر از متد __str__(self) به دست میآید.
استفاده از مدلها در صفحههای وب
در این بخش میتوانیم یک صفحه وب پیچیدهتر با بهرهگیری از محتوای به دست آمده از پایگاه داده ایجاد کنیم. کافی است فایل example/views.py را ویرایش کرده و یک نمای پیام سفارشی ایجاد کنیم:
سپس با مراجعه به نشانی http://localhost:8000 نتیجه زیر به دست میآید:
سخن پایانی
در این مقاله با روش کار با مدلهای پایگاه داده در جنگو و پایتون آشنا شدیم. همچنین برخی مثالها را برای تفهیم بهتر مطلب مورد بررسی قرار دادیم. امیدواریم این مطلب به ارتقای دانش شما در این زمینه کمک کرده باشد.
سلام. ما اگع فایل db.sqlite3 را حدف کنیم کلع دیتا هامون حذف میشن راهع دیگع ایی نیست؟