JavaRush /Курсы /Модуль 4: FastAPI /Основы ORM (Object-Relational Mapping) и SQLAlchemy

Основы ORM (Object-Relational Mapping) и SQLAlchemy

Модуль 4: FastAPI
6 уровень , 0 лекция
Открыта

Добро пожаловать в увлекательное путешествие по миру продвинутой веб-разработки.

Сегодня мы начнем с основ ORM – важного инструмента, который связывает наш код с реальной базой данных.

Ну, а SQLAlchemy станет нашим проводником в этом мире. Заваривайте чай (или кофе), и погнали!

Итак, что же значит эта загадочная аббревиатура – ORM?

Ничего сложного. Это – Object-Relational Mapping, или объектно-реляционное отображение, — мостик, связывающий мир объектов Python с реляционными базами данных.

Проще говоря, ORM позволяет работать с базой данных через Python-объекты, а не SQL-запросы.

Зачем нам это нужно?

Представьте ситуацию: у вас есть таблица базы данных с пользователями — users.

Работая напрямую с SQL, вам придется писать что-то вроде этого, чтобы получить всех пользователей старше 30 лет:


SELECT * FROM users WHERE age > 30;

С ORM это становится красивым и читаемым:


users = session.query(User).filter(User.age > 30).all()

И вот — магия! Вместо того, чтобы самому разбираться в тонкостях SQL, вы работаете с привычными объектами Python.

ORM делает за вас всю тяжелую работу по преобразованию запросов в SQL и обратно.

Плюсы ORM

  • Меньше кода: ORM автоматически генерирует SQL-запросы.
  • Читаемость: мы пишем логику на понятном языке Python.
  • Кросс-база: однажды написанный код можно легко перенести с PostgreSQL на SQLite или MySQL (в большинстве случаев).

Минусы ORM

  • Производительность: ORM добавляет небольшой "накладной" вес, т.к. формирует SQL-запросы за вас.
  • Изучение: вам нужно выучить синтаксис ORM (в нашем случае SQLAlchemy).
  • Магия: иногда ORM ведет себя "нелогично", и приходится разбираться в её внутренностях.

Знакомство с SQLAlchemy

SQLAlchemy — это одна из самых популярных ORM для Python.

У нее богатая история, удивительная гибкость и множество поклонников.

Помимо ORM, SQLAlchemy также предлагает низкоуровневый доступ к базе данных (для тех, кто хочет сам писать SQL).

SQLAlchemy делится на две больших части:

  1. Core: низкоуровневый слой для работы с SQL. Здесь мы вручную пишем SQL-запросы, которые выполняются через SQLAlchemy.
  2. ORM: высокоуровневый слой, который позволяет работать с базой данных на уровне Python-объектов.

Сегодня мы сосредоточимся на ORM, потому что она делает нашу жизнь проще... ну, чаще всего.

Если вы работали с Django ORM, то возможно заметите сходства и отличия.

Например, SQLAlchemy более гибкая и мощная, но требует чуть больше усилий на настройку.

Она прекрасно подходит для приложений, где нужна кастомизация и детальный контроль.


Примеры использования ORM

Давайте посмотрим, как ORM работает в реальной жизни. Для примера будем оперировать базой данных пользователей.

Представьте базу данных.

У нас есть таблица users:

id name age
1 Ivan 25
2 Maria 30
3 Alex 35

В SQL вы бы написали запрос:


SELECT * FROM users WHERE age > 30;

В ORM же вы работаете с классами. Например, давайте создадим класс User, который соответствует таблице users:


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)  # Первичный ключ
    name = Column(String)
    age = Column(Integer)

Теперь выполнение запроса становится проще:


users = session.query(User).filter(User.age > 30).all()

Да, вот так просто!

Преобразование данных: объекты <-> строки

Когда вы пишете:


new_user = User(name='John', age=40)

SQLAlchemy берет ваши данные и преобразует их в SQL-запрос:


INSERT INTO users (name, age) VALUES ('John', 40);

А когда вы делаете запрос, скажем, для получения всех пользователей, ORM преобразует строки из базы данных в удобные объекты Python:


users = session.query(User).all()
for user in users:
    print(user.name, user.age)

Реальные случаи использования ORM

В жизни ORM спасает вас от необходимости "плавать" в SQL. Например, представьте, что нужно выполнить несколько сложных операций над данными, таких как вложенные фильтры или сортировки. SQLAlchemy позволяет это сделать на Python-стиле:


users = session.query(User).filter(User.age > 20).order_by(User.name).all()

Здесь ORM автоматически превращает ваш код в SQL-запрос и возвращает результат, который можно сразу использовать.


Итог

Сегодня мы познакомились с ORM как концепцией и SQLAlchemy как её реализацией.

Теперь у нас появилась возможность писать чистый, поддерживаемый код для работы с базами данных, не утопая в бесконечных строках SQL.

На следующей лекции мы установим SQLAlchemy и начнем настраивать её для нашего приложения.

Так что уже сейчас можете приготовить базу данных — будем экспериментировать!

1
Задача
Модуль 4: FastAPI, 6 уровень, 0 лекция
Недоступна
Запрос к базе данных
Запрос к базе данных
1
Задача
Модуль 4: FastAPI, 6 уровень, 0 лекция
Недоступна
Еще один запрос к базе данных
Еще один запрос к базе данных
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ