Предположим, что мы решили реализовать сайт с объявлениями и хотим дать возможность создавать их нашим пользователям. Мы уже знаем, как вывести страницу с формой для добавления объявления — сгенерировать HTML с помощью шаблонизатора. Но что делать после того, как данные формы придут на сервер? Где их хранить? В этом вопросе мы разберемся в этом уроке.
Что такое СУБД
Самый простой вариант, который можно придумать — файлы. Все события можно записывать в файл, а при выводе — читать из него. Такой подход обладает бесконечным числом недостатков и абсолютно неудобен в работе.
Правильный способ работы с данными — база данных (БД). Она тоже хранится в файлах, но этим процессом на 100% управляет система управления базами данных (СУБД). Именно ее необходимо установить перед началом работы.
В вебе наиболее распространены две системы: PostgreSQL и MySQL. Настройка и установка СУБД — не такой тривиальный процесс, как установка интерпретатора, поэтому здесь мы его рассматривать не будем. В сети вы можете найти множество готовых инструкций по установке СУБД на вашу операционную систему.
СУБД стартуют как отдельные программы и живут своей собственной жизнью. Эти системы устроены таким образом, что могут обслуживать множество разных баз данных. Обычно один сайт использует одну базу данных, но все базы данных разных сайтов могут храниться в одной СУБД. С конкретной базой данных взаимодействовать можно двумя способами:
- Запустить командную оболочку СУБД, которая позволяет в интерактивном режиме поработать с командами, записать и прочитать данные, добавить пользователя в систему и так далее. При подключении или уже после него обязательно нужно выбрать базу данных, с которой вы хотите взаимодействовать:
- Подключиться к СУБД из своей программы, используя драйвер — это библиотека, которая общается с СУБД. Она имеет относительно простой интерфейс для выполнения запросов и получения результатов. Чуть ниже мы посмотрим, как такой подход работает на практике.
Отношения внутри БД
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
Любые манипуляции с таблицами в реляционных базах данных выполняются с помощью языка запросов 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 и другие темы, связанные с безопасностью
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.