- Home »

Как использовать модуль 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
Пробуй, автоматизируй, не бойся экспериментировать — и пусть твои скрипты будут быстрыми, простыми и надёжными!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.