Глава 22 · Веб-разработка с Python

Зачем веб-приложению база данных

Список Python в памяти хранит данные только до перезапуска процесса — а рано или поздно процесс перезапускается.

Список задач в разделе 22.5 хранится вот так:

app.py
zadachi = ["Выучить основы Python", "Собрать сайт на Flask"]

Это обычная переменная Python — список, который живёт в оперативной памяти, пока работает процесс приложения. У такого хранения есть ограничения, которые незаметны на маленьком примере, но становятся серьёзной проблемой по мере роста приложения и нагрузки на него.

ПроблемаЧто происходит
ПерезапускОстановили процесс Python (обновили код, перезагрузили сервер) — список исчез вместе с ним
Несколько процессовРабочее развёртывание (раздел 22.34) часто запускает несколько процессов приложения одновременно — у каждого своя копия памяти, свой список, они не видят изменений друг друга
Запрос данныхСписок умеет перебор и фильтрацию средствами Python, но не умеет быстро находить нужные записи среди миллионов без полного перебора
Согласованность при одновременных измененияхДва запроса, пришедшие почти одновременно, могут непредсказуемо испортить список, если оба меняют его в один и тот же момент

СУБД (система управления базами данных) — программная система, создающая, хранящая, обрабатывающая запросы и управляющая базами данных; база данных — это организованные хранимые данные, с которыми работает СУБД. СУБД предоставляет механизмы постоянного хранения, запросов, транзакций, ограничений и согласованной работы с данными — она решает именно эти проблемы. Конкретные гарантии при этом зависят от выбранной СУБД, спроектированной схемы, использования транзакций и кода самого приложения: СУБД не устраняет проблему автоматически сама по себе, если ей не пользоваться правильно.

Персистентность — данные, которые переживают перезапуск программы
Свойство хранить данные так, что они не исчезают после завершения процесса, называют сохранением данных между запусками, или persistence. Список Python в памяти этим свойством не обладает; файл на диске или база данных — обладают.

Разделы 22.21-22.28 разбирают, как устроены базы данных и на каком языке с ними работают, а раздел 22.29 заменяет список Python в проекте главы на базу данных SQLite.