JavaRush /Курси /Модуль 4: FastAPI /Встановлення та налаштування SQLAlchemy для FastAPI і Dja...

Встановлення та налаштування SQLAlchemy для FastAPI і Django

Модуль 4: FastAPI
Рівень 6 , Лекція 1
Відкрита

Сьогодні ми зануримося в тему встановлення й налаштування SQLAlchemy для роботи з фреймворками FastAPI та Django. Розберемося, як підготувати наш додаток до використання SQLAlchemy, налаштувати підключення до баз даних і інтегрувати цей ORM у проєкти.

Перш ніж почати налаштування, потрібно встановити SQLAlchemy та супутні бібліотеки. Також розглянемо важливі залежності, як-от драйвери баз даних, які використовуватимуться для підключення до PostgreSQL або SQLite.


Встановлення SQLAlchemy та залежностей

Найпростіший і стандартний спосіб встановлення бібліотек у Python — це використання pip. Давайте встановимо SQLAlchemy і движок бази даних:


pip install sqlalchemy
pip install psycopg2-binary  # для PostgreSQL

Якщо плануєте використовувати SQLite, додатковий драйвер встановлювати не потрібно, бо він уже вбудований у Python.

👉 Примітка: якщо хочеш працювати з іншою СУБД, знадобиться відповідний драйвер, наприклад mysqlclient для MySQL або cx_Oracle для Oracle.


⚡ Налаштування SQLAlchemy у FastAPI

FastAPI цінують за асинхронність. Але SQLAlchemy за своєю природою синхронна. Щоб використовувати її з FastAPI, можна працювати синхронно або додати бібліотеку asyncpg для асинхронної взаємодії.

Крок 1: створюємо базовий проект FastAPI

Для початку створимо структуру проєкту. Якщо ще цього не робили, виконайте:


pip install fastapi uvicorn

Створімо таку структуру проєкту:


my_fastapi_project/
│
├── main.py         # Основний файл додатку
├── models.py       # Тут будуть описані моделі SQLAlchemy
├── database.py     # Підключення до БД і сесії
└── requirements.txt

Крок 2: налаштування підключення до бази даних

Створимо файл database.py для керування підключенням до бази даних і сесіями SQLAlchemy:


from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "postgresql://user:password@localhost/db_name"

# Створюємо движок бази даних
engine = create_engine(DATABASE_URL)

# Створюємо фабрику сесій
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Пояснимо ключові елементи:

  • DATABASE_URL — рядок підключення до PostgreSQL. Для SQLite рядок виглядав би так: "sqlite:///./test.db".
  • create_engine — визначає движок бази даних.
  • sessionmaker — фабрика для створення з'єднань (сесій) з базою даних.

Крок 3: інтеграція з FastAPI

Тепер відкриємо main.py і додамо функцію для керування сесіями SQLAlchemy. Це дозволить кожному запиту мати окрему сесію:


from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import SessionLocal

app = FastAPI()

# Залежність для отримання сесії
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.get("/")
def read_root(db: Session = Depends(get_db)):
    return {"message": "Welcome to FastAPI with SQLAlchemy"}

Ця залежність передає сесію бази даних у маршрути через Depends.


🧩 Налаштування SQLAlchemy у Django

Тепер розглянемо, як SQLAlchemy можна використовувати разом із Django. Хоча Django має свій вбудований ORM, іноді потрібно підключити SQLAlchemy, наприклад при роботі з зовнішніми базами даних.

Крок 1: встановлення Django та SQLAlchemy

Переконайтеся, що Django встановлений:


pip install django

SQLAlchemy вже встановлено, тож рухаємося далі. Створіть новий проєкт Django:


django-admin startproject my_django_project

Крок 2: інтеграція SQLAlchemy

Створіть файл sqlalchemy_integration.py у одному з додатків Django або в директорії проєкту:


from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "postgresql://user:password@localhost/db_name"

engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Далі створіть хук для повернення сесій SQLAlchemy:


def get_sqlalchemy_session():
    session = SessionLocal()
    try:
        yield session
    finally:
        session.close()

Тепер ми можемо використовувати сесії SQLAlchemy в будь‑якій частині Django‑додатку, наприклад у представленнях (views.py).


🧪 Приклад використання SQLAlchemy в обох середовищах

Щоб завершити налаштування, реалізуємо приклад з простою моделлю User. Почнемо з FastAPI:

Створимо модель User в models.py:


from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    email = Column(String, unique=True, index=True)

Не забудьте створити таблиці в базі даних:


from database import engine
from models import Base

Base.metadata.create_all(bind=engine)

Додамо endpoint для створення користувачів:


@app.post("/users/")
def create_user(name: str, email: str, db: Session = Depends(get_db)):
    new_user = User(name=name, email=email)
    db.add(new_user)
    db.commit()
    db.refresh(new_user)
    return new_user

У Django підхід аналогічний. Визначте модель User за допомогою SQLAlchemy в будь‑якому файлі:


from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    email = Column(String, unique=True, index=True)

Підключіть ту саму базу даних PostgreSQL. Створюйте екземпляри користувачів через get_sqlalchemy_session, якщо потрібно.


🤔 Часті помилки й особливості

Робота з SQLAlchemy у FastAPI та Django може супроводжуватися помилками. Наприклад, якщо забути закрити сесії, отримаєте помилку "Too many connections". Використання контекстного менеджера with або залежностей (Depends) може запобігти витокам з'єднань.

Також пам'ятайте: якщо ви використовуєте асинхронну взаємодію у FastAPI, то краще обирати бібліотеку asyncpg замість psycopg2.


Тепер у нас є готова база для роботи з SQLAlchemy у двох популярних фреймворках. У наступній лекції ми заглибимось у створення моделей і дізнаємось, як описувати структури таблиць правильно й ефективно.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ