Python для Backend-разработки: с нуля до Pro

Комплексный курс для старта карьеры в backend-разработке, охватывающий работу с базами данных, популярные фреймворки и создание API. Вы освоите Django и Flask, научитесь проектировать безопасные приложения и интегрировать их с внешними системами.

1. Основы Python и работа с реляционными базами данных PostgreSQL и MySQL

Основы Python и работа с реляционными базами данных PostgreSQL и MySQL

Backend-разработка строится на двух фундаментальных столпах: логике обработки данных (код) и хранении этих данных (базы данных). Python стал стандартом индустрии благодаря своей лаконичности и мощной экосистеме для работы с данными. В этой статье мы разберем необходимый минимум синтаксиса Python и научимся взаимодействовать с двумя самыми популярными реляционными базами данных: PostgreSQL и MySQL.

Краткий экскурс в Python для Backend

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

Структуры данных

Backend постоянно пересылает данные в формате JSON. В Python прямым аналогом JSON является словарь (dict).

Списки (list) используются для хранения наборов данных, например, результатов запроса к базе данных, где каждая строка таблицы — это отдельный элемент списка.

Обработка исключений

Работа с базами данных и сетью всегда сопряжена с рисками: сервер может быть недоступен, пароль неверен или запрос составлен с ошибкой. Для этого используется конструкция try-except.

Реляционные базы данных: концепция

Реляционные базы данных (RDBMS) хранят информацию в виде таблиц, связанных между собой. Это строгая структура, где каждый столбец имеет определенный тип данных.

!ER-диаграмма, показывающая связь между пользователями и их заказами через внешний ключ

SQL: Язык запросов

SQL (Structured Query Language) — это единый стандарт для общения с реляционными базами. Независимо от того, используете вы PostgreSQL или MySQL, базовый синтаксис будет одинаковым.

Основные операции (CRUD):

  • Create (Создание): INSERT INTO users (name, email) VALUES ('Alex', 'alex@example.com');
  • Read (Чтение): SELECT * FROM users WHERE name = 'Alex';
  • Update (Обновление): UPDATE users SET email = 'new@example.com' WHERE id = 1;
  • Delete (Удаление): DELETE FROM users WHERE id = 1;
  • Подготовка окружения

    Python не умеет общаться с базами данных «из коробки». Ему нужны драйверы — библиотеки, которые транслируют команды Python в протокол базы данных.

    Установим драйверы для PostgreSQL и MySQL:

    Работа с PostgreSQL

    PostgreSQL — это мощная объектно-реляционная СУБД, стандарт для сложных корпоративных систем. Библиотека psycopg2 является самым популярным адаптером для нее.

    Подключение и выполнение запросов

    Для выполнения SQL-команд используется объект курсор. Курсор — это инструмент, который позволяет перебирать записи в базе данных и выполнять операции.

    Безопасность: SQL-инъекции

    Одна из самых критичных уязвимостей в backend-разработке — SQL-инъекция. Она возникает, когда данные от пользователя подставляются в запрос напрямую через форматирование строк.

    ОПАСНО (Никогда так не делайте):

    БЕЗОПАСНО (Параметризованные запросы): Драйвер базы данных сам экранирует опасные символы, если передавать данные вторым аргументом.

    Работа с MySQL

    MySQL часто используется в веб-проектах благодаря своей скорости и простоте. Логика работы через mysql-connector аналогична psycopg2, но есть синтаксические отличия в плейсхолдерах.

    Транзакции: Commit и Rollback

    При изменении данных (INSERT, UPDATE, DELETE) базы данных используют механизм транзакций. Изменения не применяются мгновенно. Команда conn.commit() подтверждает транзакцию, сохраняя изменения на диске. Если произошла ошибка, можно выполнить conn.rollback(), чтобы отменить все изменения в рамках текущей транзакции.

    Context Managers (Менеджеры контекста)

    Чтобы не забывать закрывать соединения и курсоры, в Python используется оператор with. Это профессиональный подход к управлению ресурсами.

    Итоги

  • Python как инструмент: Для работы с БД важны понимание списков, словарей и обработки исключений (try-except).
  • Драйверы: Для каждой СУБД нужен свой драйвер (psycopg2 для PostgreSQL, mysql-connector для MySQL).
  • Курсор: Это основной объект для выполнения SQL-команд и получения результатов.
  • Безопасность: Никогда не формируйте SQL-запросы через f-строки или конкатенацию. Всегда используйте параметризованные запросы (плейсхолдеры %s).
  • Транзакции: Изменения данных требуют явного подтверждения через метод commit().
  • 2. Микрофреймворк Flask и работа с данными через SQLAlchemy

    Микрофреймворк Flask и работа с данными через SQLAlchemy

    В предыдущей статье мы разбирали, как взаимодействовать с базами данных, используя «сырой» SQL. Это фундаментальный навык, но в современной коммерческой разработке писать SQL-запросы вручную для каждой операции — долго, небезопасно и трудно поддерживать. Здесь на сцену выходят фреймворки и ORM.

    Сегодня мы создадим фундамент вашего будущего backend-приложения: развернем веб-сервер на Flask и настроим управление данными через SQLAlchemy.

    Философия Flask: Микрофреймворк

    Flask называют микрофреймворком не потому, что на нем можно делать только маленькие сайты, а потому, что он предоставляет только необходимый минимум: маршрутизацию (routing) и обработку HTTP-запросов. Всё остальное — работу с базой данных, валидацию форм, аутентификацию — вы подключаете сами по мере необходимости.

    Это идеальный выбор для старта: вы понимаете, как работает каждый винтик вашей системы, потому что сами его прикрутили.

    Первая программа на Flask

    Установим Flask:

    Создадим файл app.py. В Flask приложение — это экземпляр класса Flask.

    Когда вы запустите этот код и откроете в браузере адрес http://127.0.0.1:5000, Flask перехватит запрос, найдет функцию, связанную с маршрутом /, выполнит её и вернет строку браузеру.

    ORM: Object-Relational Mapping

    Работа с базой данных через SQL-драйверы (как psycopg2) заставляет вас мыслить таблицами и строками. Python же оперирует объектами и классами. ORM (Object-Relational Mapping) — это технология, которая связывает эти два мира.

    Вместо того чтобы писать INSERT INTO users..., вы создаете объект User и сохраняете его. ORM сама сгенерирует нужный SQL-код.

    !Преобразование Python-объектов в SQL-запросы через ORM

    Преимущества SQLAlchemy

  • Безопасность: Автоматическая защита от SQL-инъекций.
  • Абстракция: Вы можете сменить базу данных с SQLite на PostgreSQL, изменив всего одну строчку конфигурации, не переписывая код запросов.
  • Скорость разработки: Меньше шаблонного кода.
  • Для интеграции с Flask мы будем использовать расширение Flask-SQLAlchemy.

    Настройка и создание моделей

    Модель в ORM — это класс Python, который отображается на таблицу в базе данных. Атрибуты класса становятся колонками таблицы.

    Расширим наше приложение app.py:

    Здесь мы описали структуру данных. db.Column определяет тип поля и ограничения (например, unique=True означает, что значения не могут повторяться).

    Чтобы создать таблицы в базе данных, нужно выполнить команду в контексте приложения:

    Метод create_all() просматривает все наследники db.Model и создает соответствующие таблицы в базе данных, если их еще нет.

    CRUD операции через ORM

    Теперь разберем, как выполнять основные операции с данными, используя синтаксис Python.

    Create (Создание)

    Для добавления записи нужно создать экземпляр класса модели, добавить его в сессию и зафиксировать изменения (commit).

    Сессия (db.session) — это «буфер» между вашим кодом и базой данных. Запросы накапливаются в сессии и отправляются в БД только при вызове commit().

    Read (Чтение)

    SQLAlchemy предоставляет мощный интерфейс запросов через атрибут query.

    Update (Обновление)

    Обновление происходит интуитивно: вы получаете объект, меняете его атрибуты и делаете коммит. ORM сама отследит изменения.

    Delete (Удаление)

    Создание простого REST API

    Backend-разработчик редко просто пишет скрипты. Чаще всего он создает API (Application Programming Interface) — интерфейс, через который фронтенд или мобильное приложение общается с сервером.

    Реализуем эндпоинт, который возвращает список пользователей в формате JSON.

    В этом примере:

  • jsonify — утилита Flask для формирования корректного JSON-ответа.
  • request.get_json() — метод для получения данных, отправленных клиентом (например, через Postman или фронтенд).
  • Код 201 во втором маршруте означает "Created" (Создано).
  • Итоги

  • Flask — это легковесный каркас веб-приложения. Он отвечает за прием запросов и маршрутизацию URL.
  • SQLAlchemy — это ORM, позволяющая работать с базой данных как с набором Python-объектов, избавляя от написания сырого SQL.
  • Модель — это класс, описывающий структуру таблицы БД. Изменения в объектах модели транслируются в SQL-запросы.
  • Сессия (db.session) — механизм управления транзакциями. Любые изменения (добавление, обновление, удаление) требуют вызова commit() для сохранения.
  • Связка Flask + SQLAlchemy является промышленным стандартом для создания REST API на Python.