اتصال به دیتابیس MySQL/MariaDB در برنامه‌های Django


برای اتصال به دیتابیس MariaDB یا MySQL در برنامه‌های Django، در ابتدا باید ماژول مربوط به آن‌را با اجرای دستور زیر، نصب کنید:

کپی
pip install mysqlclient

در ادامه، بایستی در فایل settings.py تنظیمات مربوط به دیتابیس را وارد کنید:

کپی
# other codes ...
import os
DATABASES = {
    'default': {
        'ENGINE':   'django.db.backends.mysql', 
        'NAME':     os.getenv("MYSQL_DB_NAME"), 
        'USER':     os.getenv("MYSQL_DB_USER"),
        'PASSWORD': os.getenv("MYSQL_DB_PASS"),
        'HOST':     os.getenv("MYSQL_DB_HOST"),
        'PORT':     os.getenv("MYSQL_DB_PORT"),
    },
}
# other codes ...

در ادامه، بایستی طبق مستندات تنظیم متغیرهای محیطی، متغیرهای مربوط به دیتابیس خود را، به برنامه، اضافه کنید؛ به عنوان مثال:

کپی
MYSQL_DB_HOST=bromo.liara.cloud
MYSQL_DB_PORT=33035
MYSQL_DB_USER=root
MYSQL_DB_PASS=gIg1uXioTrGDZOESQf0YXE87
MYSQL_DB_NAME=compassionate_heisenberg

در نهایت، کافیست دستور زیر را اجرا کنید تا فایل requirements.txt به‌روز شود و نام ماژول مربوط به دیتابیس، در این فایل، قرار بگیرد:

کپی
pip freeze > requirements.txt

تمامی کارها انجام شده است و شما می‌توانید از دیتابیس خود استفاده کنید. به عنوان مثال، می‌توانید با اجرای دستور زیر، یک application جدید ایجاد کنید:

کپی
python manage.py startapp mysql_app

سپس، این application جدید را به بخش INSTALLED_APPS در settings.py، اضافه کنید:

کپی
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'mysql_app', # add this
]

در ادامه، در فایل mysql_app/views.py قطعه کد زیر را وارد کنید تا اتصال به دیتابیس، بررسی شود:

کپی
from django.shortcuts import HttpResponse
from django.db import connections

def check_mysql_connection(request):
    try:
        with connections['default'].cursor() as cursor:
            cursor.execute("SELECT 1")
            result = cursor.fetchone()
        if result:
            return HttpResponse("MySQL connection successful")
        else:
            return HttpResponse("MySQL connection failed")
    except Exception as e:
        return HttpResponse(f"MySQL connection failed: {e}")

سپس، بایستی در دایرکتوری mysql_app، یک فایل به نام urls.py ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید:

کپی
from django.urls import path
from .views import check_mysql_connection

urlpatterns = [
    path('', check_mysql_connection, name='check_mysql_connection'),
]

در نهایت، می‌توانید در فایل urls.py موجود در دایرکتوری اصلی پروژه، قطعه کد زیر را اضافه کنید:

کپی
from django.urls import include, path

urlpatterns = [
    path('mysql/', include('mysql_app.urls')),
    
]

اکنون می‌توانید برنامه‌تان را در لیارا مستقر کرده و در صفحه mysql/ وضعیت اتصال به دیتابیس خود را بررسی کنید.

استفاده از Connection Pooling

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

برای استفاده از قابلیت connection pooling در دیتابیس MySQL، فقط کافیست تا با اجرای دستور زیر، ماژول موردنیاز را نصب کنید:

کپی
pip install django-db-connection-pool[mysql]

سپس، در فایل settings.py در بخش DATABASES، فیلد مربوط به ENGINE را مانند شکل زیر تغییر دهید:

کپی
# other codes ...
import os
DATABASES = {
    'default': {
        'ENGINE':   'dj_db_conn_pool.backends.mysql', 
        'NAME':     os.getenv("MYSQL_DB_NAME"), 
        'USER':     os.getenv("MYSQL_DB_USER"),
        'PASSWORD': os.getenv("MYSQL_DB_PASS"),
        'HOST':     os.getenv("MYSQL_DB_HOST"),
        'PORT':     os.getenv("MYSQL_DB_PORT"),
    },
}
# other codes ...

همچنین، می‌توانید تنظیمات مربوط به Connection Pooling را در فیلدی به نام POOL_OPTIONSمانند قطعه کد زیر، بر روی دیتابیس خود، اعمال کنید:

کپی
# other codes ...
import os
DATABASES = {
    'default': {
        'ENGINE':   'dj_db_conn_pool.backends.mysql', 
        'NAME':     os.getenv("MYSQL_DB_NAME"), 
        'USER':     os.getenv("MYSQL_DB_USER"),
        'PASSWORD': os.getenv("MYSQL_DB_PASS"),
        'HOST':     os.getenv("MYSQL_DB_HOST"),
        'PORT':     os.getenv("MYSQL_DB_PORT"),
        'POOL_OPTIONS': {
            'POOL_SIZE': 10,
            'MAX_OVERFLOW': 10,
            'RECYCLE': 24 * 60 * 60
        }
    },
}
# other codes ...

در نهایت، کافیست دستور زیر را اجرا کنید تا فایل requirements.txt، به‌روز شود و نام ماژول مورد نیاز، در آن، قرار بگیرد:

کپی
pip freeze > requirements.txt

اکنون می‌توانید مجدداً برنامه‌تان را در لیارا مستقر کرده و در صفحه mysql/ وضعیت اتصال به دیتابیس خود را بررسی کنید.