Сьогодні ми зануримося в тему встановлення й налаштування 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 у двох популярних фреймворках. У наступній лекції ми заглибимось у створення моделей і дізнаємось, як описувати структури таблиць правильно й ефективно.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ