Home » Как использовать модуль sqlite3 в Python 3
Как использовать модуль sqlite3 в Python 3

Как использовать модуль sqlite3 в Python 3

Если ты когда-нибудь задумывался, как быстро и без лишних танцев с бубном прикрутить базу данных к своему Python-скрипту — добро пожаловать. В этой статье разберём, как использовать модуль sqlite3 в Python 3: что это, зачем оно надо, как всё быстро поднять и не наступить на грабли. Будет много практики, чуть-чуть теории, реальные кейсы и лайфхаки для автоматизации. Всё — чтобы ты мог за пару минут получить рабочую БД, не заморачиваясь с установкой монструозных серверов. Погнали!

Что такое sqlite3 и почему это важно?

SQLite — это встраиваемая база данных, которая хранится в одном файле. Никаких демонов, сервисов, конфигов, отдельного сервера — просто файл, который ты можешь таскать туда-сюда, как обычный текстовый документ. В Python модуль sqlite3 входит в стандартную библиотеку, так что ничего дополнительно ставить не нужно. Это идеальный вариант для скриптов, автоматизации, тестирования, небольших проектов и даже для хранения конфигов.

Почему это важно? Потому что иногда не хочется (или нельзя) поднимать полноценный MySQL/PostgreSQL сервер ради пары таблиц. А иногда нужно быстро что-то заскриптовать, собрать статистику, обработать логи или просто сохранить результаты работы скрипта. Вот тут sqlite3 и выручает.

Как это работает?

  • Вся база — это один файл на диске (или в памяти, если нужно).
  • Работаешь с ней через стандартный SQL (SELECT, INSERT, UPDATE, DELETE и т.д.).
  • В Python всё делается через модуль sqlite3 — подключил, открыл файл, погнал писать запросы.
  • Нет отдельного процесса сервера — всё работает в рамках твоего приложения.

Выглядит просто, но есть нюансы. Например, SQLite не любит параллельную запись (но для большинства скриптов это не проблема). А ещё — он реально быстрый для небольших объёмов данных и не требует никакой настройки.

Как быстро и просто всё настроить?

Вот тут начинается магия. Если у тебя стоит Python 3 (а если нет — ставь срочно), то sqlite3 уже есть. Никаких pip install, никаких sudo apt install — просто импортируй модуль и работай.


import sqlite3

# Создаём (или открываем) базу данных
conn = sqlite3.connect('mydb.sqlite3')

# Создаём курсор — через него выполняются все запросы
cur = conn.cursor()

# Создаём таблицу
cur.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)')

# Добавляем данные
cur.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 30))
cur.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 25))

# Сохраняем изменения
conn.commit()

# Читаем данные
cur.execute('SELECT * FROM users')
rows = cur.fetchall()
for row in rows:
print(row)

# Закрываем соединение
conn.close()

Всё, база готова! Файл mydb.sqlite3 появился в текущей директории. Можно таскать его между серверами, бэкапить, заливать в git (если не жалко). Если хочешь работать с базой только в памяти (например, для тестов), используй sqlite3.connect(':memory:').

Примеры, схемы, практические советы

Давай разберём несколько кейсов — когда sqlite3 реально спасает, а когда лучше поискать что-то посерьёзнее.

Кейс SQLite3 MySQL/PostgreSQL Комментарий
Скрипт для сбора логов 👍 👎 SQLite проще, не требует сервера
Веб-приложение с 1000+ пользователей 👎 👍 Лучше использовать полноценную СУБД
Тестирование SQL-запросов 👍 👍 SQLite отлично подходит для тестов
Хранение конфигов/кэша 👍 👎 SQLite быстрее и проще
Параллельная запись из нескольких процессов 👎 👍 SQLite не любит параллелизм

Практические советы:

  • Для небольших скриптов и автоматизации — SQLite идеален.
  • Если нужно много параллельных записей — ищи что-то другое.
  • Бэкап базы — просто копируй файл. Всё!
  • Можно использовать DB Browser for SQLite для просмотра и редактирования базы.
  • Для миграций и схем — используй обычные SQL-скрипты.
  • Не храни в базе большие бинарные данные (фото, видео) — лучше положи их на диск, а в базе держи только пути.

Положительные и отрицательные кейсы

Положительный кейс: Нужно быстро собрать статистику по логам nginx на сервере. Пишешь скрипт, который парсит логи и складывает данные в SQLite. Потом делаешь SELECT — и у тебя готовый отчёт. Всё в одном файле, никаких зависимостей.

Отрицательный кейс: Пытаешься сделать высоконагруженный REST API с 1000+ запросов в секунду, где каждый запрос пишет в базу. SQLite начинает тормозить, появляются блокировки, данные теряются. Тут уже нужен PostgreSQL или MySQL.

Команды и полезные сниппеты


# Создать базу в памяти (идеально для тестов)
conn = sqlite3.connect(':memory:')

# Получить список таблиц
cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
print(cur.fetchall())

# Добавить несколько записей за раз
cur.executemany('INSERT INTO users (name, age) VALUES (?, ?)', [('Charlie', 22), ('Dave', 28)])

# Использовать контекстный менеджер (автоматически закрывает соединение)
with sqlite3.connect('mydb.sqlite3') as conn:
cur = conn.cursor()
cur.execute('SELECT * FROM users')
print(cur.fetchall())

# Получить данные в виде словаря (а не tuple)
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute('SELECT * FROM users')
for row in cur.fetchall():
print(dict(row))

Похожие решения, программы и утилиты

  • TinyDB — простая NoSQL база для Python, хранит данные в JSON. Документация
  • Shelve — стандартный модуль Python для хранения объектов в виде key-value (но не SQL).
  • DuckDB — новая in-process база, похожая на SQLite, но с упором на аналитику. Официальный сайт
  • LevelDB, RocksDB — key-value базы, но без SQL.

Но если нужен именно SQL и простота — SQLite вне конкуренции.

Статистика и сравнение с другими решениями

Параметр SQLite MySQL PostgreSQL
Установка Встроен в Python Отдельный сервер Отдельный сервер
Производительность (1-10k записей) Очень высокая Высокая Высокая
Производительность (100k+ записей, параллельно) Средняя/низкая Высокая Высокая
Параллельная запись Плохо Отлично Отлично
Бэкап Копия файла mysqldump, копия данных pg_dump, копия данных
Размер базы До 2 ТБ Ограничен только диском Ограничен только диском
Транзакции Да Да Да
ACID Да Да Да

Интересные факты и нестандартные способы использования

  • SQLite используется в Android, iOS, браузерах (Chrome, Firefox), в Docker, в git, в Skype — везде, где нужна простая и надёжная база.
  • Можно использовать SQLite как формат для обмена данными между разными языками и платформами — просто передавай файл.
  • В некоторых проектах SQLite используют как формат для хранения кэша или временных данных (например, в CI/CD пайплайнах).
  • Можно хранить в базе не только данные, но и схемы, миграции, даже скрипты для автоматизации.
  • Есть плагины для Vim и Emacs, чтобы работать с SQLite прямо из редактора.
  • Можно использовать SQLite для хранения данных в Docker-контейнерах, если не хочется поднимать отдельный сервис.

Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?

  • Быстрое хранение и обработка данных без лишних зависимостей.
  • Лёгкая интеграция с любыми Python-скриптами — от парсеров до бэкапов.
  • Возможность делать сложные выборки и агрегации прямо в SQL, не городя велосипедов на Python.
  • Простота бэкапа и восстановления — просто копируешь файл.
  • Можно использовать одну и ту же базу на разных серверах (например, для обмена данными между скриптами).
  • Идеально для временных данных, кэша, хранения результатов тестов, логов, статистики.
  • Можно использовать для миграций и хранения схем — просто храни SQL-скрипты в отдельной таблице.

Вывод — заключение и рекомендации

Если тебе нужен быстрый, простой и надёжный способ хранить данные в Python-скриптах — sqlite3 это must-have. Не нужно поднимать отдельный сервер, не нужно ставить дополнительные пакеты — всё работает из коробки. Для автоматизации, сбора статистики, хранения логов, кэша, тестирования — это идеальный выбор. Если же проект растёт, появляется много параллельных запросов и пользователей — тогда уже смотри в сторону MySQL или PostgreSQL.

Рекомендую использовать sqlite3 для:

  • Автоматизации на сервере (бэкапы, парсинг логов, отчёты)
  • Тестирования и прототипирования
  • Хранения временных и вспомогательных данных
  • Миграций и обмена данными между скриптами

Если нужен сервер для более серьёзных задач — смотри VPS или выделенный сервер на этом блоге.

Официальная документация Python по sqlite3: https://docs.python.org/3/library/sqlite3.html

Пробуй, автоматизируй, не бойся экспериментировать — и пусть твои скрипты будут быстрыми, простыми и надёжными!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked