پلتفرم Django
(Django Platform)اتصال به دیتابیسها
فهرست عناوین:
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;",
},
},
}
در انتها، بایستی درون فایل 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
- قابلیت Connection Pooling در دیتابیس MySQL
- قابلیت Connection Pooling در دیتابیس MSSQL
قابلیت 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})
قابلیت 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
متوجه شدم، برو گام بعدی!