28.08.2026
Проектирование базы данных на Python для новичков
Представьте, что вы решили вести список своих книг. Сначала вы просто записываете названия в тетрадь. Потом добавляете авторов, даты прочтения, оценки. Через год тетрадь превращается в хаос, а найти нужную книгу становится невозможно. База данных — это та же тетрадь, но умная, организованная и способная мгновенно отвечать на вопросы. В этой статье мы разберем, как спроектировать базу данных с помощью Python, даже если вы никогда раньше не сталкивались с программированием.
Что такое база данных простыми словами
База данных (БД) — это структурированное хранилище информации. Вместо хаотичных записей данные организованы в таблицы, как в Excel. Каждая таблица описывает один тип объектов: книги, читатели, заказы. Строки таблицы — это отдельные записи, а столбцы — свойства этих записей. Например, таблица «Книги» может иметь столбцы: название, автор, год издания, жанр.
Python — это язык программирования, который позволяет создавать и управлять базами данных. Он прост для изучения, но при этом достаточно мощный для решения серьезных задач. Для работы с БД в Python существует встроенный модуль sqlite3, который не требует установки дополнительных программ. Это идеальный выбор для начинающих.
Шаг 1. Определяем структуру данных
Прежде чем писать код, нужно ответить на вопрос: какую информацию мы хотим хранить и какие вопросы будем задавать к базе? Допустим, мы создаем базу данных для домашней библиотеки. Нам нужно хранить:
Название книги
Автора
Год издания
Жанр
Оценку (от 1 до 10)
Прочитана ли книга
Эти данные образуют одну таблицу. Но что если один автор написал несколько книг? Или одна книга может относиться к нескольким жанрам? Тогда нужно разбивать данные на несколько таблиц и связывать их между собой. Этот процесс называется нормализацией. Для простоты начнем с одной таблицы, а затем усложним структуру.
Шаг 2. Создаем базу данных в Python
Для работы с базой данных нам понадобится всего несколько строк кода. Вот минимальный пример создания базы данных и таблицы:
import sqlite3
conn = sqlite3.connect('library.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author TEXT NOT NULL,
year INTEGER,
genre TEXT,
rating INTEGER,
read_status BOOLEAN
)
''')
conn.commit()
conn.close()
Разберем этот код по строкам. sqlite3.connect создает файл базы данных (если его нет) и подключается к нему. cursor — это объект, через который мы отправляем команды базе. Внутри CREATE TABLE мы описываем структуру таблицы: каждое поле имеет имя и тип данных. INTEGER PRIMARY KEY AUTOINCREMENT означает, что каждая запись получит уникальный номер автоматически. TEXT — это текст, INTEGER — целое число, BOOLEAN — логическое значение (да/нет).
Шаг 3. Добавляем данные
Теперь, когда таблица создана, мы можем вносить в нее записи. Для этого используется команда INSERT:
cursor.execute('''
INSERT INTO books (title, author, year, genre, rating, read_status)
VALUES ('Мастер и Маргарита', 'Михаил Булгаков', 1967, 'Роман', 10, True)
''')
conn.commit()
Обратите внимание: мы не указываем поле id — оно заполнится автоматически. Значения вставляются в том же порядке, что и перечислены поля. Если вы хотите добавить несколько книг сразу, можно использовать цикл или метод executemany, который принимает список кортежей.
Шаг 4. Читаем данные из базы
Самый частый запрос — получить все данные из таблицы. Для этого используется команда SELECT:
cursor.execute('SELECT * FROM books')
rows = cursor.fetchall()
for row in rows:
print(row)
Каждая строка будет представлена в виде кортежа (tuple) — упорядоченного набора значений. Например: (1, 'Мастер и Маргарита', 'Михаил Булгаков', 1967, 'Роман', 10, 1). Здесь True превратилось в 1, потому что база данных хранит логические значения как 0 и 1.
Можно фильтровать данные. Например, найти все книги с оценкой выше 8:
cursor.execute('SELECT title, author FROM books WHERE rating > 8')
rows = cursor.fetchall()
Оператор WHERE позволяет задавать условия отбора. Это одно из главных преимуществ базы данных перед обычным файлом.
Шаг 5. Обновляем и удаляем записи
Иногда нужно изменить данные. Например, вы перечитали книгу и хотите поставить новую оценку. Для этого используется команда UPDATE:
cursor.execute('''
UPDATE books SET rating = 9 WHERE title = 'Мастер и Маргарита'
''')
conn.commit()
Удаление происходит через команду DELETE:
cursor.execute("DELETE FROM books WHERE title = 'Ненужная книга'")
conn.commit()
Важно помнить: если не указать условие WHERE, команда применится ко всем записям. Это может привести к потере всех данных, поэтому будьте внимательны.
Шаг 6. Связываем таблицы
В реальных проектах данные редко помещаются в одну таблицу. Вернемся к примеру с библиотекой. Если мы хотим хранить информацию об авторах отдельно (например, их биографию), логично создать вторую таблицу:
CREATE TABLE authors (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
birth_year INTEGER
)
Теперь в таблице books вместо поля author мы будем хранить author_id — номер автора из таблицы authors. Это называется внешним кл