نحوه کار با مدل ها و پایگاه داده های جنگو

مدل های جنگو قلب مدیریت داده ها در هر برنامه جنگو هستند. آنها ساختار پایگاه داده شما را تعریف می کنند و به عنوان پایه ای برای ایجاد برنامه های کاربردی پویا و مبتنی بر داده عمل می کنند.

با سیستم نقشه برداری شی-رابطه ای قدرتمند جنگو (ORM)، کار با مدل ها یکپارچه می شود و شما را قادر می سازد تا بدون زحمت داده ها را تعریف کنید، جستجو کنید و دستکاری کنید.

بیایید بررسی کنیم که چگونه مدل‌ها و پایگاه‌های داده جنگو با هم کار می‌کنند تا برنامه شما را زنده کنند.

مدل های جنگو چیست؟

در جنگو، مدل ها ساختار جداول پایگاه داده خود را تعریف کنید. آنها کلاس‌های پایتون هستند که مستقیماً به جداول پایگاه داده نگاشت می‌شوند، بنابراین می‌توانید با داده‌های خود به روشی راحت و سطح بالا تعامل داشته باشید.

هر کلاس مدل نشان دهنده یک جدول و هر ویژگی مدل نشان دهنده یک فیلد در آن جدول است.

سیستم ORM جنگو نیاز به نوشتن پرس و جوهای خام SQL را از بین می برد و کارهایی مانند ایجاد، به روز رسانی و مدیریت رکوردهای پایگاه داده را ساده می کند.

چگونه یک مدل جنگو ایجاد کنیم؟

برای ایجاد یک مدل، یک کلاس پایتون را در داخل تعریف می کنید مدل هاpy فایل یکی از برنامه های شما هر ویژگی در کلاس نشان دهنده یک فیلد پایگاه داده است، و جنگو به طور خودکار ساختار پایگاه داده زیرین را هنگام اجرای migration کنترل می کند.

در اینجا یک نمونه از یک مدل ساده در جنگو آورده شده است:

# In your app's models.py file

from django.db import models

class Book(models.Model):

    title = models.CharField(max_length=200)

    author = models.CharField(max_length=100)

    published_date = models.DateField()

    isbn = models.CharField(max_length=13, unique=True)

    def __str__(self):

        return self.title
  • عنوان و نویسنده – اینها فیلدهای کاراکتر هستند (CharField) با حداکثر طول.
  • انتشار_تاریخ – این یک فیلد تاریخ است (فیلد تاریخ).
  • isbn – یک فیلد کاراکتر (CharField) با یک محدودیت منحصر به فرد (منحصر به فرد = درست است).

این __str__() متد تضمین می کند که وقتی کتابی را پرس و جو می کنید، عنوان کتاب را به عنوان نمایش رشته ای برمی گرداند.

فیلدهای مدل

در جنگو، فیلدهای مدل، نوع داده ای را که می خواهید در پایگاه داده خود ذخیره کنید، مشخص می کند. هر نوع فیلد روش ذخیره و اعتبارسنجی داده ها را مشخص می کند.

در زیر برخی از رایج ترین انواع فیلدها آورده شده است:

  • CharField – برای متن کوتاه (مثلا نام).
name = models.CharField(max_length=100)
  • TextField – برای متن طولانی (مثلاً توضیحات).
description = models.TextField()
  • IntegerField – برای اعداد کامل
age = models.IntegerField()
  • FloatField – برای اعداد اعشاری
price = models.FloatField()
  • BooleanField – برای درست است یا نادرست ارزش ها
is_active = models.BooleanField(default=True)
  • فیلد تاریخ – برای نگهداری خرما
birth_date = models.DateField()
  • DateTimeField – برای ذخیره تاریخ و زمان
created_at = models.DateTimeField(auto_now_add=True)
  • کلید خارجی – برای ایجاد رابطه چند به یک با مدل دیگر.
user = models.ForeignKey(User, on_delete=models.CASCADE)
  • ManyToManyField – برای ایجاد رابطه چند به چند بین مدل ها.
tags = models.ManyToManyField(Tag)

روابط مدل

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

  • کلید خارجی – یک رابطه چند به یک را تعریف می کند. یک شی در این مدل به یک شی در مدل دیگر پیوند داده شده است (به عنوان مثال، یک پست متعلق به یک کاربر است).
user = models.ForeignKey(User, on_delete=models.CASCADE)
  • OneToOneField – یک رابطه یک به یک را تعریف می کند. هر شیء در یک مدل دقیقاً به یک شیء در مدل دیگر مرتبط است (مثلاً یک کاربر یک نمایه دارد).
profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
  • ManyToManyField – یک رابطه چند به چند را تعریف می کند. بسیاری از اشیاء یک مدل را می توان به بسیاری از اشیاء مدل دیگر پیوند داد (به عنوان مثال، یک پست می تواند چندین برچسب داشته باشد و هر تگ می تواند به چندین پست تعلق داشته باشد).
tags = models.ManyToManyField(Tag)

این روابط به شما امکان می دهد بین مدل ها ارتباط ایجاد کنید و پیوندهایی بین داده ها در پایگاه داده خود برقرار کنید.

اضافه کردن مدل به پایگاه داده

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

ایجاد مهاجرت

برای ایجاد فایل مهاجرت برای مدل جدید خود، دستور زیر را اجرا کنید:

python manage.py makemigrations

جنگو تغییرات شما را تجزیه و تحلیل خواهد کرد مدل هاpy فایل کنید و یک فایل مهاجرت ایجاد کنید که آن تغییرات را در قالبی که جنگو می تواند در پایگاه داده اعمال کند، توصیف می کند.

پیشنهاد می‌کنیم بخوانید:  روش ایجاد تغییر مسیرهای موقت و دائمی NGINX

خروجی مشابه این را خواهید دید:

Migrations for 'myapp':

  myapp/migrations/0001_initial.py

    - Create model Book

اعمال مهاجرت

پس از ایجاد مهاجرت، آن را با استفاده از مهاجرت کنید دستور:

python manage.py migrate

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

راه اندازی پایگاه داده پیش فرض

جنگو از چندین پایگاه داده پشتیبانی می کند، بنابراین می توانید بهترین را برای پروژه خود انتخاب کنید. به طور پیش فرض، جنگو استفاده می کند SQLiteکه سبک وزن، راه اندازی آسان و ایده آل برای توسعه و پروژه های کوچک است.

برای محیط های تولید، ما پایگاه های داده قوی تر مانند PostgreSQL، MySQL، یا MariaDB به دلیل مقیاس پذیری و عملکرد آنها.

در این آموزش، اجازه دهید با تنظیم پایگاه داده پیش فرض SQLite شروع کنیم.

پیکربندی پایگاه داده در تنظیماتpy

به طور پیش فرض، جنگو برای استفاده از SQLite پیکربندی شده است، که از قبل با پایتون نصب شده است، بنابراین نیازی به تنظیمات اضافی نیست. در اینجا روش اطمینان از تنظیم پروژه شما برای استفاده از SQLite آورده شده است:

  1. به پروژه خود بروید تنظیماتpy فایلی که در پوشه پروژه قرار دارد (myproject/myproject/تنظیمات.py).
  2. برو به پایگاه های داده بخش در تنظیماتpy، جایی که جنگو قبلاً SQLite را به عنوان پایگاه داده پیش فرض پیکربندی کرده است. باید به این شکل باشد:
DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.sqlite3',

        'NAME': BASE_DIR / 'db.sqlite3',

    }

}
  • موتور – باطن پایگاه داده (در این مورد SQLite) را مشخص می کند.
  • NAME – مسیر فایل پایگاه داده SQLite (db.sqlite3). هنگامی که مهاجرت اولیه را اجرا می کنید، جنگو به طور خودکار این فایل را ایجاد می کند.

اعمال مهاجرت برای جداول پیش فرض

پس از تأیید تنظیمات پایگاه داده خود، باید مهاجرت های اولیه را برای تنظیم جداول پیش فرض اعمال کنید (مانند کاربران و جلسات). دستور زیر را اجرا کنید:

python manage.py migrate

این دستور باعث ایجاد db.sqlite3 فایل در دایرکتوری پروژه شما root و تمام جداول لازم برای اجرای برنامه خود را تنظیم کنید.

پس از تکمیل مهاجرت، آن را بررسی کنید db.sqlite3 در پوشه پروژه شما ایجاد شد. این فایل پایگاه داده شما را به صورت محلی ذخیره می کند و با اضافه کردن داده های بیشتر، رشد خواهد کرد.

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

هنگامی که پایگاه داده پیش‌فرض SQLite را برای توسعه راه‌اندازی کردید، ممکن است نیاز داشته باشید که یک سیستم مدیریت پایگاه داده قوی‌تر (DBMS) را با رشد پروژه خود ادغام کنید.

جنگو از چندین DBMS پشتیبانی می کند، از جمله PostgreSQL، MySQL، MariaDB، و اوراکل. هر کدام نقاط قوت خود را دارند و به پیکربندی خاصی برای ادغام با جنگو نیاز دارند.

مروری بر دیگر پایگاه های داده پشتیبانی شده در جنگو

بیایید نگاهی به هر یک از گزینه ها و تفاوت آنها با SQLite بیندازیم:

PostgreSQL

یک پایگاه داده قدرتمند و منبع باز با ویژگی های پیشرفته، مانند پشتیبانی از پرس و جوهای پیچیده، انواع داده ها مانند JSON و جستجوی متن کامل. به دلیل مقیاس پذیری، استحکام و مجموعه ویژگی ها، برای برنامه های جنگو تولیدی بسیار توصیه می شود.

PostgreSQL به دلیل رعایت دقیق استانداردهای SQL شناخته شده است و برای برنامه های پیچیده و در مقیاس بزرگ قابل اعتماد است.

  • راه اندازی – PostgreSQL نیاز به نصب دارد psycopg2 بسته، که به عنوان آداپتور بین جنگو و PostgreSQL عمل می کند.
  • پیکربندی – علاوه بر پیش فرض موتور و NAME پارامترهای SQLite، PostgreSQL نیز نیاز دارد کاربر، رمز عبور ، میزبان، و بندر. این پارامترها در پیکربندی شده اند تنظیماتpy فایل، در زیر پایگاه های داده بخش:
DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.postgresql',

        'NAME': 'mydatabase',

        'USER': 'mydatabaseuser',

        'PASSWORD': 'mypassword',

        'HOST': 'localhost',

        'PORT': '5432',

    }

}
  • تفاوت ها – بر خلاف SQLite، PostgreSQL یک پایگاه داده با ویژگی های کامل است که از چندین کاربر همزمان، پرس و جوی پیشرفته و تراکنش ها پشتیبانی می کند. شما باید PostgreSQL را نصب کنید روی سرور خود، یک پایگاه داده و کاربر ایجاد کنید و تنظیمات پیچیده تری را پیکربندی کنید.

MySQL و MariaDB

هر دو پایگاه داده های رابطه ای سریع و قابل اعتماد هستند که به طور گسترده در توسعه وب استفاده می شوند. MySQL به سرعت معروف است، در حالی که MariaDB، فورک MySQL، تمرکز می کند روی توسعه مبتنی بر جامعه و کاملاً با MySQL سازگار است.

این پایگاه داده ها برای برنامه های کاربردی وب با ترافیک بالا بسیار عالی هستند و اغلب به دلیل عملکرد آنها مورد توجه قرار می گیرند.

  • راه اندازی – MySQL و MariaDB هر دو از mysqlclient بسته برای رابط با جنگو.
  • پیکربندی – هر دو از پارامترهای مشابه PostgreSQL استفاده می کنند که در پیکربندی شده اند تنظیماتpy فایل زیر پایگاه های داده بخش:
DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',  # or 'django.db.backends.mariadb' for MariaDB

        'NAME': 'mydatabase',

        'USER': 'mydatabaseuser',

        'PASSWORD': 'mypassword',

        'HOST': 'localhost',

        'PORT': '3306',

    }

}
  • تفاوت ها – در مقایسه با SQLite، MySQL و MariaDB به دلیل عملکردشان با مجموعه داده های بزرگ و برنامه های کاربردی وب پر ترافیک شناخته شده اند. آنها از چندین موتور ذخیره سازی، خواندن سریع پشتیبانی می کنند و می توانند میلیون ها درخواست را به سرعت انجام دهند.
پیشنهاد می‌کنیم بخوانید:  بایگانی VPS

Oracle و Microsoft SQL Server

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

با این حال، راه‌اندازی آن‌ها می‌تواند پیچیده‌تر باشد و معمولاً در محیط‌های سازمانی خاصی که کسب‌وکار در حال حاضر متکی است، استفاده می‌شود. روی Oracle یا SQL Server برای نرم افزارهای دیگر.

  • راه اندازی – هر دو به درایورهای اضافی برای ادغام با جنگو نیاز دارند. برای اوراکل، شما نیاز دارید cx_Oracleو برای SQL Server، شما نیاز دارید pyodbc.
  • پیکربندی – هر یک از این سیستم ها به تنظیمات پیچیده تری نیاز دارند، از جمله نصب سرور، نصب درایور، و پیکربندی اعتبار پایگاه داده در تنظیماتpy فایل
  • تفاوت ها – Oracle و SQL Server ویژگی‌های درجه یک سازمانی مانند مدیریت تراکنش‌های پیشرفته، عملکرد بهینه و یکپارچه‌سازی با سیستم‌های مقیاس بزرگ را ارائه می‌دهند. راه اندازی آنها پیچیده تر از SQLite است و معمولاً توسط مدیران پایگاه داده تخصصی مدیریت می شود.

انتخاب پایگاه داده مناسب برای پروژه

با وجود این همه پایگاه داده مختلف، چگونه پایگاه داده مناسب را انتخاب می کنید؟ در اینجا یک تفکیک سریع و دقیق وجود دارد:

  • توسعه و آزمایش – با SQLite بچسبید. این ساده است، نیازی به تنظیم ندارد و برای آزمایش محلی ایده آل است.
  • تولید در مقیاس کوچک – برای برنامه های وب کوچکتر و کم ترافیک، MySQL یا MariaDB ممکن است انتخاب بهتری باشد. آنها عملکرد بهتری نسبت به SQLite ارائه می دهند و یادگیری آنها راحت تر از PostgreSQL است.
  • تولید در مقیاس بزرگ – PostgreSQL برای پروژه های جنگو که به مقیاس پذیری، امنیت و ویژگی های پیشرفته نیاز دارند، به شدت توصیه می شود.
  • محیط های سازمانی – اگر در یک محیط سازمانی کار می کنید که قبلاً از Oracle یا SQL Server برای برنامه های دیگر استفاده می کند، این پایگاه داده ها به دلیل الزامات یکپارچه سازی احتمالاً بهترین انتخاب هستند.

راه اندازی PostgreSQL با جنگو

در این بخش، ما را از طریق process ادغام PostgreSQL با جنگو، زیرا یکی از رایج ترین پایگاه های داده برای برنامه های تولیدی است.

  1. برای ادغام PostgreSQL با جنگو، ابتدا باید آن را نصب کنید روی سیستم شما:
sudo apt update

sudo apt install postgresql postgresql-contrib
  1. جنگو از psycopg2 بسته برای تعامل با PostgreSQL. با استفاده از آن نصب کنید pip:
pip install psycopg2
  1. به کاربر PostgreSQL بروید:
sudo -u postgres psql
  1. ایجاد یک پایگاه داده جدید:
CREATE DATABASE mydatabase;
  1. یک کاربر با رمز عبور ایجاد کنید:
CREATE USER mydatabaseuser WITH PASSWORD 'mypassword';
  1. اعطای تمام امتیازات به کاربر روی پایگاه داده:
GRANT ALL PRIVILEGES روی DATABASE mydatabase TO mydatabaseuser;
  1. از پوسته PostgreSQL خارج شوید:
\q
  1. خودت را باز کن تنظیماتpy فایل و پیدا کنید پایگاه های داده بخش آن را برای PostgreSQL به صورت زیر تغییر دهید:
DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.postgresql',

        'NAME': 'mydatabase',

        'USER': 'mydatabaseuser',

        'PASSWORD': 'mypassword',

        'HOST': 'localhost',  # Use '127.0.0.1' if 'localhost' doesn't work

        'PORT': '5432',       # Default PostgreSQL port

    }

}

واقعی رمز عبور و کاربر مقادیر باید با مقادیری که تعیین کرده اید مطابقت داشته باشد مرحله 5.

  1. اکنون که پایگاه داده شما پیکربندی شده است، مهاجرت های پروژه خود را برای تنظیم جداول لازم در PostgreSQL اعمال کنید:
python manage.py migrate

این دستور جداول مورد نیاز را در پایگاه داده PostgreSQL شما ایجاد می کند.

  1. در نهایت، سرور توسعه جنگو را اجرا کنید تا تأیید کنید که ادغام PostgreSQL موفقیت آمیز است:
python manage.py runserver

باز کنید http://127.0.0.1:8000/ در مرورگر شما اگر جنگو خوش آمدید page بدون خطا ظاهر می شود، اتصال پایگاه داده شما به درستی کار می کند.

نتیجه گیری

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

برای توسعه، SQLite ایده آل است، اما برای پروژه های بزرگتر و آماده تولید، PostgreSQL، MySQL یا MariaDB مقیاس پذیری و عملکرد بهتری را ارائه می دهند. نگران نباشید؛ انعطاف‌پذیری جنگو تضمین می‌کند که برنامه شما می‌تواند با رشد یکپارچه مقیاس‌پذیری داشته باشد.

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

سوالات متداول مدل های جنگو

مدل های جنگو چگونه کار می کنند؟

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

چگونه یک مدل جنگو ایجاد کنم؟

برای ایجاد یک مدل جنگو، یک کلاس در آن تعریف کنید مدل هاpy که از آن به ارث می برد django.db.models.model و فیلدها را مشخص کنید. سپس، اجرا کنید python مدیریت کنید.py مهاجرت ها و python مدیریت کنید.py مهاجرت کنید برای به روز رسانی پایگاه داده

آیا می توانم از چندین پایگاه داده با مدل های جنگو استفاده کنم؟

بله، جنگو از چندین پایگاه داده پشتیبانی می کند. می توانید آنها را در آن پیکربندی کنید تنظیماتpy و استفاده کنید با استفاده از() روشی برای تعیین اینکه یک پرس و جو باید از کدام پایگاه داده استفاده کند.