django

پلتفرم Django

(Django Platform)

اتصال به دیتابیس‌ها

فهرست عناوین:


توجه داشته باشید برای اتصال به هر دیتابیس باید درایور‌های آن را نصب کرده باشید. مثلاً برای MySQL و PostgreSQL نیاز است تا مقادیر زیر در فایل requirements.txt شما وجود داشته باشد:
Django == 3.0.7
psycopg == 3.1.18
psycopg-binary == 3.1.18
mysqlclient == 1.4.6‍
برای ایجاد فایل requirements.txt کافیست تا در محیط مجازی پروژه Django خود، دستور pip freeze > requirements.txt را اجرا کنید.

PostgreSQL

در صورتی که تمایلی به خواندن آموزش متنی ندارید می‌توانید ویدیو‌ی آموزشی ‌را مشاهده کنید.

در ابتدا باید driver دیتابیس PostgreSQL را نصب کنید. برای این کار دستورpip install "psycopg[binary]" را اجرا کنید‍. سپس تنظیمات دیتابیس‌تان در فایل settings.py را به شکل زیر تغییر دهید:

DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.postgresql',
      'NAME': '<database_name>',
      'USER': '<database_username>',
      'PASSWORD': '<password>',
      'HOST': '<database_hostname_or_ip>',
      'PORT': '<database_port>',
  }
}
هر کدام از این متغیر‌ها را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.

MySQL

در ابتدا باید driver دیتابیس MySQL را نصب کنید. برای این کار دستور pip install mysqlclient اجرا کنید‍. سپس تنظیمات دیتابیس‌تان در فایل settings.py را به شکل زیر تغییر دهید:

DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME': '<database_name>',
      'USER': '<database_username>',
      'PASSWORD': '<password>',
      'HOST': '<database_hostname_or_ip>',
      'PORT': '<database_port>',
  }
}
هر کدام از این متغیر‌ها را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.

SQLite

در صورتی که تمایلی به خواندن آموزش متنی ندارید می‌توانید ویدیو‌ی آموزشی ‌را مشاهده کنید.

برای استفاده از SQLite باید در نظر داشته باشید که فایل سیستم برنامه‌های لیارا، Read-Only است. به عبارتی، بعد از عملیات استقرار، امکان ذخیره‌سازی فایل‌های جدید در کنار فایل‌های پروژه، وجود ندارد و داده‌های پایدار را باید داخل دیسک ذخیره کنید. برای این کار، یک پوشه‌ی اختصاصی برای دیتابیس‌تان بسازید و فایل دیتابیس را داخل آن قرار بدهید و سپس آن پوشه را به عنوان دیسک تعریف کرده و دیپلوی کنید. اطلاعات بیشتر درباره‌ی دیسک‌ها

به عنوان مثال، برای تغییر مسیر قرار‌گیری فایل دیتابیس به پوشه data می‌توانید تنظیمات دیتابیس‌تان را در فایل settings.py به این شکل تغییر دهید:

DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.sqlite3',
      'NAME': os.path.join(BASE_DIR, 'data', 'db.sqlite3'),
  }

}

MSSQL

برای اتصال به دیتابیس SQL Server کافیست تا مقدار DATABASES موجود در فایل settings.pyخود را به شکل زیر، تغییر دهید:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<database_name>",
        "USER": "<database_username>",
        "PASSWORD": "<database_password>",
        "HOST": "<database_host>",
        "PORT": "<database_port>",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
            "extra_params": "Encrypt=no;",
        },
    },
}
هر کدام از متغیر‌های فوق را باید با توجه به اطلاعات دیتابیس‌تان تغییر دهید.
توجه داشته باشید که باید حتماً نسخه ODBC Driver بر روی 18 تنظیم باشد.

در انتها، بایستی درون فایل requirements.txt، قطعه کد زیر را اضافه کنید تا برنامه، به درستی در لیارا، مستقر شود:

mssql-django==1.4.2
pyodbc==5.1.0

استفاده از Connection Pooling

شما می‌توانید در برنامه Django خود، قابلیت Connection Pooling را نیز فعال کنید. در Connection Pooling برنامه به جای ایجاد یک ارتباط (Connection) جدید برای انجام عملیات دیتابیسی و بستن آن پس از پایان عملیات، از ارتباط‌هایی که قبلاً ایجاد شده‌اند، استفاده می‌کند.

استفاده از Connection Pooling کارایی برنامه را افزایش می‌دهد و تاثیر بسیار زیادی در بهینه‌سازی و کاهش منابع مورد استفاده برنامه و دیتابیس دارد. بنابراین توصیه می‌شود که حتماً در حالت Production، از این قابلیت، استفاده کنید. در ادامه، به نحوه فعال‌سازی این قابلیت با توجه به نوع هر دیتابیس، خواهیم پرداخت:

قابلیت Connection Pooling در دیتابیس PostgreSQL

برای فعال‌سازی این قابلیت در دیتابیس Postgres کافیست تا ماژول زیر را در پروژه خود نصب کنید:

pip install django-db-connection-pool[postgresql]

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

DATABASES = {
    'default': {
        'ENGINE': 'dj_db_conn_pool.backends.postgresql'
    }
}

البته، اگر که قصد تغییر فایل settings.py را ندارید، می‌توانید با استفاده از ماژول psycopg_pool، به صورت مستقیم این کار را انجام دهید؛ برای نصب این ماژول، باید دستور زیر را اجرا کنید:

pip install "psycopg[pool]"

پس از آن، می‌توانید به شکل زیر، از Connection Pooling در برنامه خود برای کار با دیتابیس، استفاده کنید (به عنوان مثال، قطعه کد زیر در فایل views.py به کار رفته است):

from psycopg_pool import ConnectionPool
from django.shortcuts import render
import random, string, os

def index(request):
with ConnectionPool(conninfo=os.getenv('DB_URI')) as pool:
pool.wait()
with pool.connection() as conn:
for _ in range(10):
data = ''.join(random.choices(string.ascii_letters + string.digits, k=10))
conn.execute("INSERT INTO myapp_testmodel (data) VALUES (%s)", [data])

with conn.cursor() as cursor:
cursor.execute("SELECT data FROM myapp_testmodel")
data = [row[0] for row in cursor.fetchall()]

return render(request, 'myapp/index.html', {'data': data})
در نظر داشته باشید که مقدار آرگومان conninfo را باید برابر با URI دیتابیس Postgres خود قرار دهید. که در قطعه کد بالا، از متغیرهای محیطی برنامه، فراخوانی شده است.
قابلیت Connection Pooling در دیتابیس MySQL

برای فعال‌سازی این ویژگی در دیتابیس MySQL، باید در ابتدا ماژول مربوطه را با استفاده از دستور زیر، نصب کنید:

pip install django-db-connection-pool[mysql]

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

DATABASES = {
    'default': {
        'ENGINE': 'dj_db_conn_pool.backends.mysql'
    }
}

پس از انجام کار فوق، قابلیت Connection Pooling در دیتابیس برنامه شما، فعال می‌شود.

قابلیت Connection Pooling در دیتابیس MSSQL

برای فعال‌سازی این قابلیت، کافیست تا قطعه کد زیر را به فایل settings.py اضافه کنید:

DATABASE_CONNECTION_POOLING = True

متوجه شدم، برو گام بعدی!
;