دوره‌ها / Django / دیتابیس PostgreSQL (PostgreSQL Intro)

دیتابیس PostgreSQL (PostgreSQL Intro)

25 دقیقه Article

PostgreSQL: دیتابیس حرفه‌ای برای تولید 🐘

SQLite برای توسعه عالیه، ولی برای محیط تولید بهتره از PostgreSQL استفاده کنید. PostgreSQL یک دیتابیس قدرتمند و قابل اعتماده!

چرا PostgreSQL؟ PostgreSQL یک دیتابیس enterprise-grade است که از ویژگی‌های پیشرفته مثل Full-Text Search، JSON fields و Transactions قوی پشتیبانی می‌کنه.

نصب PostgreSQL

# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib

# macOS
brew install postgresql

# Windows
# از سایت postgresql.org دانلود کنید

تنظیمات Django

بعد از نصب PostgreSQL، باید adapter پایتون رو نصب کنید:

pip install psycopg2-binary

سپس تنظیمات دیتابیس رو تغییر بدید:

# mysite/settings.py
DATABASES = {{
    'default': {{
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }}
}}
امنیت: هرگز پسورد دیتابیس رو در کد commit نکنید! از environment variables یا فایل‌های تنظیمات جداگانه استفاده کنید.
نکته: برای محیط توسعه، می‌تونید از SQLite استفاده کنید و فقط در محیط تولید از PostgreSQL. این کار setup رو راحت‌تر می‌کنه.

🎯 تمرین عملی:

PostgreSQL رو نصب کنید و یک دیتابیس جدید بسازید. سپس تنظیمات Django رو تغییر بدید و migration ها رو اجرا کنید تا جداول ساخته بشن.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تمرین: ساخت DSN ساده Postgres Easy
سوال تمرین

تمرین: ساخت DSN ساده Postgres

چهار مقدار می‌گیریم و یک DSN ساده می‌سازیم (برای درک اتصال).

ورودی (Input)

چهار خط: user, password, host, db.

خروجی (Output)

یک خط: postgresql://user:password@host/db

قانون مهم

کد شما باید فقط از stdin بخواند و فقط روی stdout چاپ کند. از ورودی‌های تعاملی استفاده نکنید.

پاسخ تمرین
PYTHON
import sys

def solve():
    lines = sys.stdin.read().splitlines()
    user = lines[0] if len(lines) > 0 else ''
    pw = lines[1] if len(lines) > 1 else ''
    host = lines[2] if len(lines) > 2 else ''
    db = lines[3] if len(lines) > 3 else ''
    sys.stdout.write(f'postgresql://{user}:{pw}@{host}/{db}')

if __name__ == '__main__':
    solve()

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.