Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

СУБД Ключевые аспекты веб-разработки на Python

Предположим, что мы решили реализовать сайт с объявлениями и хотим дать возможность создавать их нашим пользователям. К текущему моменту мы уже знаем как вывести страницу с формой для добавления объявления — сгенерировать HTML с помощью шаблонизатора. Но что делать после того, как данные формы придут на сервер? Где их хранить?

Самый простой вариант, который можно придумать — файлы. Всё, что приходит, можно записывать в файл, а при выводе читать из него. Такой подход обладает бесконечным числом недостатков и абсолютно неудобен в работе. Правильный способ работы с данными — база данных. База данных, в конечном итоге, тоже хранится в файлах, но этим процессом на 100% управляет СУБД, так называемая система управления базами данных. Именно её необходимо установить перед началом работы. В вебе наиболее распространены две системы: PostgreSQL и MySQL. Настройка и установка СУБД — не такой тривиальный процесс, как установка интерпретатора, поэтому здесь мы его рассматривать не будем. В сети вы можете найти множество готовых рецептов по установке СУБД на вашу операционную систему. Искать лучше так: "postgresql install ubuntu".

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

  • Запустив командную оболочку СУБД, которая позволяет в интерактивном режиме поработать с командами, записать и прочитать данные, добавить пользователя в систему и так далее. При подключении (или уже после) обязательно выбрать базу данных, с которой вы хотите взаимодействовать:

    db repl

  • Подключиться к СУБД из своей программы, используя драйвер. Драйвер — это библиотека, которая общается с СУБД. Она выставляет наружу относительно простой интерфейс для выполнения запросов и получения результатов. Чуть ниже мы посмотрим, как такой подход работает на практике.

Отношения

PostgreSQL и MySQL относятся к классу реляционных баз данных, так как работа этих СУБД основана на реляционной алгебре. Мы не будем погружаться в теоретические дебри. Скажу лишь, что данные в реляционных базах хранятся в виде таблиц. Наверняка вы работали с табличными данными в Microsoft Office или Google Spreadsheets.

Каждая таблица в такой базе данных имеет своё имя и набор именованных колонок. Колонки в базе данных обычно называют полями. Например, таблица с объявлениями может называться ads и содержать следующие данные:

id telephone title
1 132453 Продам машину
2 342341 Куплю яхту
3 908324 Сдам в аренду палатку

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

Обратите внимание на поле id. Его вводят искусственно, для идентификации конкретной строчки. СУБД содержат механизмы, позволяющие генерировать идентификатор автоматически при вставке данных в базу. Как правило, идентификаторы используют в адресах страниц. Например, такой адрес http://myavito.ru/ads/53 выведет объявление с id, равным 53.

SQL

Любые манипуляции c таблицами в реляционных базах данных выполняются с помощью языка запросов SQL (Structured Query Language). Открыв командную оболочку СУБД, можно попробовать выполнить следующие запросы (предполагаем, что таблица ads уже создана):

SELECT * FROM ads; -- выбрать все записи
SELECT title FROM ads WHERE id = 4; -- выбрать title для записи с id равным 4
SELECT telephone FROM ads ORDER BY id DESC; -- выбрать все телефоны отсортировав их по полю id в обратном порядке

INSERT INTO ads (telephone, title) VALUES ("392503", "Куплю слона"); -- вставить в таблицу ads новую запись

DELETE FROM ads WHERE id = 5; -- удалить запись с id равным 5

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

Драйвер

Если внутри командной оболочки базы мы можем выполнять SQL напрямую, то из кода этого не сделать. Необходим драйвер, который передаст наш SQL базе данных и вернёт ответ. Но перед тем, как послать запрос, нужно подключиться к самой базе, введя правильное имя пользователя и пароль. СУБД — многопользовательская система с продвинутой системой прав. Безопасность при работе с базой — ключевой аспект. Ведь данные — самое ценное, что есть в приложении. Если потеряются данные, то бизнес, скорее всего, прекратит своё существование.

К примеру, драйвер postgres (сторонний пакет) позволяет работать с PostgreSQL как-то так:

>>> from postgres import Postgres
>>> db = Postgres("postgres://user@localhost/test")
>>>
>>> db.run("CREATE TABLE foo (bar text, baz int)")
>>> db.run("INSERT INTO foo VALUES ('buz', 42)")
>>> db.run("INSERT INTO foo VALUES ('bit', 537)")
>>>
>>> db.one("SELECT * FROM foo WHERE bar='buz'")
Record(bar='buz', baz=42)
>>>
>>> db.all("SELECT * FROM foo ORDER BY bar")
[Record(bar='bit', baz=537), Record(bar='buz', baz=42)]
>>>
>>> db.all("SELECT baz FROM foo ORDER BY bar")
[537, 42]

Что нужно выучить

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

  • Базы данных. Необходимо уметь устанавливать и настраивать их. Настройка включает в себя оперирование сокетами (в том числе сетевыми), управление пользователями и многими другими вещами (опять знание операционных систем).
  • Необходимо знать SQL, что включает в себя и основы теории множеств.
  • Понятия нормализации и денормализации. Нормальные формы. Ключи и индексы.
  • Сериализация и десериализация.
  • Идемпотентность.
  • Fluent Interface.
  • Итератор.
  • Безопасность: Экранирование, SQL Injection.

Самостоятельная работа

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

В любом случае полезно установить саму базу и поиграться с ней.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

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

Получить доступ
900
упражнения
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
22 сентября 8 месяцев

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»