Что такое СУБД и реляционные БД

Этим занятием мы открываем небольшой цикл по базам данных в Python. И, как всегда, вначале отметим на вопрос: для чего вообще нужен этот инструмент и что он собой представляет?

Предположим, что мы делаем игру, например, «Сапер» и в ней предполагается сохранять результаты игр и профили игроков. Обычно, для этих целей создают базу данных (БД) с набором таблиц. Пусть это будут таблицы «Игроки» (users) и «Игры» (games).

Каждая таблица имеет заданную структуру (набор определенных столбцов) и определенное количество записей – строк. Например, так:

Структура первой таблицы users определяется набором полей (столбцов):

  • id (тип integer) – уникальный идентификатор записи (строки);
  • sex (integer) – пол игрока (1 – женский; 2 – мужской);
  • name (text) – имя игрока;
  • level (integer) – уровень игрока;
  • score (integer) – максимальное число очков, заработанных игроком.

Структура второй таблицы games, следующая:

  • id (тип integer) – уникальный идентификатор записи (строки);
  • user_id (integer) – внешний ключ для связи с таблицей users;
  • score (integer) – число очков, набранных в игре;
  • time (integer) – время начала игры.

Разумеется, это лишь примеры таблиц для хранения данных, чтобы вам было проще понимать как все это организовано. И, кроме того, структура каждой таблицы определяется разработчиком и может быть самой разной.

В приведенном примере, таблица games имеет внешний ключ user_id, содержащий id игрока, участвующего в соответствующих играх. Затем, по этому ключу можно будет выполнять связывание таблиц и получать сводные данных по играм и данным игрока. Такая связь по-английски звучит как relation, откуда и пошло название реляционные базы данных, то есть, базы, содержащие таблицы с возможностью связываться между собой. В дальнейшем мы будем говорить исключительно о таких типах БД.

Ну, хорошо, с понятием базы данных разобрались. Но зачем так «городить огород», когда можно просто взять и записать все во внешний файл и там хранить информацию об игроках и играх? Дело в том, что при работе с обычным файлом возникает ряд сопутствующих задач, которые необходимо будет решить программисту. Например, как обеспечить безопасность данных, если в момент записи произойдет программный сбой или попросту не хватит места на носителе? Продумать формат хранимой информации непосредственно в файле. Как обратиться только к отдельной записи и как соединить записи из нескольких таблиц. И так далее. Это только первичные вопросы. В ходе реализации наверняка подтянутся и другие. Чтобы не иметь таких типовых проблем программисты пользуются различными СУБД для организации хранения различных данных.

Более детально это выглядит так. После выбора определенной СУБД программист получает доступ к ее API (Application Programming Interface) – программному интерфейсу для взаимодействия с СУБД. Фактически, к набору функций, через которые производится работа с базами данных.

Для дальнейшего изложения материала нам нужно определиться с СУБД. При программировании на Python популярными являются следующие:

PyMySQL, Python SQLite и Python PostgreSQL

В рамках наших занятий мы будем рассматривать пакет SQLite как один из самых распространенных и простых в использовании. Кроме того, данный модуль идет в стандартной поставке языка Python, поэтому вам его, скорее всего, не придется отдельно устанавливать.

SQLite используется для создания легковесной дисковой БД, то есть, эта СУБД не поддерживает сетевое взаимодействие (разве что удаленный доступ к файлу БД, но не более того). Также она имеет ограничение при многопользовательском доступе: запись данных может осуществлять только один поток или процесс в один момент времени. А вот на чтение таких ограничений нет. SQLite работает по принципу «один пишет – многие читают» и старается развиваться и функционировать по правилу «минимальный, но полный набор». Она идеально подходит для хранения данных различных приложений.

Все взаимодействие с СУБД происходит буквально с помощью нескольких методов, главным из которых является

execute(SQL)

Он передает СУБД указание выполнить запрос, написанный на языке

SQL (Structured Query Language)

И, фактически, все взаимодействие с БД происходит посредством этого языка. Возможно, вам покажется, что изучать отдельно еще какой-то язык только ради того, чтобы взаимодействовать с БД – это как то уж сложновато? Но, оно стоит того, так как это очень распространенный язык и многие СУБД используют его в качестве интерфейса взаимодействия. Например, если в вы соберетесь создавать сайты, то там очень популярна БД MySQL, которая также использует язык SQL. Правда, в разных СУБД этот язык немного отличается, как говорят, имеет свои д иалекты. Но это, в основном, касается деталей, наиболее распространенные его элементы остаются неизменными.

Итак, чтобы научиться работать с SQLite, главным образом, нужно изучить язык SQL этого пакета. В этом нам поможет вот такая вспомогательная программа

DB Browser for SQLite

для просмотра БД SQLite. Она совершенно бесплатна и ее можно скачать с официального сайта:

https://sqlitebrowser.org

Здесь нажимаем на «Download» и выбираем инсталлятор под нужную ОС. После установки и запуска увидим вот такое окно:

Все, теперь у нас все готово, чтобы начать изучать SQLite на Python. На следующем занятии мы посмотрим как подключить модуль SQLite в программе на Питоне, создать БД и записывать SQL-запрос.