Python і SQLite: проста база даних для проєкту

19.04.2026 0 By AdminA

Коли в проєкті потрібно зберігати дані, не завжди є сенс одразу піднімати окремий сервер баз даних. Для невеликих застосунків, навчальних проєктів, прототипів і локальних інструментів чудово підходить SQLite. Це легка вбудована база даних, яка працює з одним файлом і не вимагає складної інсталяції. У Python її зручно використовувати через стандартну бібліотеку sqlite3.

Чому саме SQLite

Головна перевага SQLite — простота. Ви створюєте файл бази даних, підключаєтесь до нього в коді та працюєте з таблицями через звичні SQL-запити. Для багатьох невеликих проєктів цього більш ніж достатньо.

  • Не потребує окремого сервера. Уся база зберігається в одному файлі.
  • Підходить для старту. Зручно для навчання, тестування та прототипування.
  • Працює через SQL. Якщо ви знаєте базові запити, перейти до SQLite дуже легко.
  • Вбудована в Python. Не потрібно встановлювати додаткові пакети.

Водночас SQLite краще використовувати там, де немає великого навантаження й високих вимог до паралельної роботи багатьох користувачів. Для більшості особистих і невеликих проєктів це практичне та надійне рішення.

Підключення до бази даних

Щоб почати, достатньо імпортувати модуль sqlite3 і відкрити підключення до файлу бази. Якщо файл не існує, SQLite створить його автоматично.

import sqlite3

conn = sqlite3.connect('project.db')
cursor = conn.cursor()

Тут project.db — це назва файлу бази даних. Об’єкт conn відповідає за з’єднання, а cursor використовується для виконання SQL-команд.

Створення таблиці

Найчастіше перший крок — створити таблицю. Припустимо, нам потрібна база для збереження завдань у простому списку справ. Кожне завдання може мати назву, статус виконання та дату створення.

cursor.execute('''
CREATE TABLE IF NOT EXISTS tasks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    completed INTEGER DEFAULT 0,
    created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()

Що тут відбувається:

  • IF NOT EXISTS не дозволяє створити таблицю повторно.
  • id INTEGER PRIMARY KEY AUTOINCREMENT створює унікальний автоматичний ідентифікатор.
  • title TEXT NOT NULL означає, що назва завдання обов’язкова.
  • completed INTEGER DEFAULT 0 зберігає статус: 0 — не виконано, 1 — виконано.
  • created_at автоматично фіксує час створення запису.

Після змін у структурі бази обов’язково викликайте conn.commit(), щоб зберегти їх у файлі.

Додавання даних

Щоб додати запис, використовуйте параметризований запит. Це не лише зручно, а й допомагає уникати помилок через некоректні символи в тексті.

cursor.execute(
    'INSERT INTO tasks (title, completed) VALUES (?, ?)',
    ('Написати першу версію проєкту', 0)
)
conn.commit()

Знак ? означає місце для значення. Дані передаються окремо від SQL-запиту, тому код стає чистішим і безпечнішим для роботи з користувацьким введенням.

Читання даних із таблиці

Після додавання записів їх потрібно вміти отримувати. Для цього виконується SELECT-запит.

cursor.execute('SELECT id, title, completed, created_at FROM tasks')
rows = cursor.fetchall()

for row in rows:
    print(row)

Метод fetchall() повертає всі рядки результату. Якщо записів багато, можна використовувати fetchone() для отримання по одному рядку або організувати пагінацію вже на рівні логіки застосунку.

Фільтрація даних

SQLite дозволяє легко знаходити лише потрібні записи. Наприклад, щоб отримати тільки невиконані завдання:

cursor.execute('SELECT title FROM tasks WHERE completed = 0')
open_tasks = cursor.fetchall()

Або знайти завдання за частиною назви:

cursor.execute('SELECT title FROM tasks WHERE title LIKE ?', ('%проєкт%',))

Оновлення записів

У реальному проєкті дані часто змінюються. Наприклад, завдання можна позначити як виконане.

cursor.execute(
    'UPDATE tasks SET completed = 1 WHERE id = ?',
    (1,)
)
conn.commit()

Зверніть увагу: після оновлення також потрібно викликати commit(). Інакше зміни залишаться лише в поточній сесії підключення.

Видалення записів

Якщо якийсь запис більше не потрібен, його можна видалити:

cursor.execute('DELETE FROM tasks WHERE id = ?', (1,))
conn.commit()

Ця операція є незворотною на рівні коду, тому в реальних проєктах її часто поєднують із підтвердженням дії в інтерфейсі або з архівацією даних замість повного видалення.

Закриття підключення

Після завершення роботи з базою важливо закривати з’єднання:

conn.close()

Це хороша звичка, яка допомагає уникати блокування файлу та робить код акуратнішим. Якщо ваш застосунок використовує базу протягом тривалого часу, варто контролювати відкриття і закриття з’єднань у відповідних частинах програми.

Мініприклад повного сценарію

Нижче — компактний приклад, який показує весь базовий цикл: підключення, створення таблиці, додавання даних і виведення результату.

import sqlite3

conn = sqlite3.connect('project.db')
cursor = conn.cursor()

cursor.execute('''
CREATE TABLE IF NOT EXISTS tasks (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    completed INTEGER DEFAULT 0
)
''')

cursor.execute(
    'INSERT INTO tasks (title, completed) VALUES (?, ?)',
    ('Перевірити роботу SQLite', 0)
)

conn.commit()

cursor.execute('SELECT id, title, completed FROM tasks')
for task in cursor.fetchall():
    print(task)

conn.close()

Цей код можна використати як стартову основу та поступово розширювати. Наприклад, додати функції для редагування, пошуку, сортування або інтегрувати базу в вебзастосунок чи десктопний інтерфейс.

Що варто продумати далі

Коли проста база вже працює, з’являються наступні задачі: структура таблиць, зв’язки між даними, обробка помилок і організація коду. Навіть у невеликому проєкті зручно відокремлювати логіку роботи з базою в окремий модуль, щоб основна частина програми не перетворювалася на хаотичний набір SQL-команд.

  • Виносьте SQL-запити в окремі функції.
  • Використовуйте параметризовані запити замість вставки значень у рядок.
  • Зберігайте зміни через commit() у потрібний момент.
  • Закривайте з’єднання після завершення роботи.

Висновок

Python і SQLite — це просте та практичне поєднання для створення бази даних у невеликому проєкті. Ви отримуєте зрозумілий інструмент без складного налаштування, а стандартний модуль sqlite3 дозволяє швидко почати працювати з таблицями, записами та запитами. Якщо вам потрібен надійний спосіб зберігати дані в локальному застосунку або прототипі, SQLite стане хорошою основою для старту.

Comments

comments