JavaRush /Курсы /Модуль 4: FastAPI /Установка и настройка SQLAlchemy для FastAPI и Django

Установка и настройка 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)

Добавим эндпоинт для создания пользователей:


@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 в двух популярных фреймворках. В следующей лекции мы углубимся в создание моделей и узнаем, как описывать структуры таблиц правильно и эффективно.

1
Задача
Модуль 4: FastAPI, 6 уровень, 1 лекция
Недоступна
Установка SQLAlchemy и создание подключения к базе данных
Установка SQLAlchemy и создание подключения к базе данных
1
Задача
Модуль 4: FastAPI, 6 уровень, 1 лекция
Недоступна
Настройка базы данных в FastAPI
Настройка базы данных в FastAPI
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Илья Уровень 90
11 января 2026
В современных версиях SQLAlchemy (2.0+) параметр autocommit=False был удален, в актуальных версиях сессия всегда работает в режиме «без автокоммита», пока явно не вызвать db.commit()