Python: уроки, справочник и задачи

SQLite: введение во встраиваемую базу данных

Раздел: SQL и SQLite · Обновлено 31.10.2026

SQLite - встраиваемая реляционная база данных, которая хранит все таблицы в одном файле и работает без отдельного сервера. Из статьи вы узнаете, как она устроена, чем отличается от MySQL и PostgreSQL, где ее применяют, какие у нее ограничения и как создать первую базу на Python.

SQLite - введение
Фото: W.carter / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Как устроена SQLite
  2. Где применяется SQLite
  3. Сравнение с серверными СУБД
  4. Особенности типов и ограничений
  5. Первая база на Python
  6. Инструменты для просмотра базы
  7. Частые вопросы
    1. Нужно ли устанавливать SQLite для работы из Python?
    2. Какой максимальный размер базы SQLite?
    3. Подходит ли SQLite для сайта?
    4. Как защитить базу SQLite паролем?

Как устроена SQLite

Обычная СУБД вроде PostgreSQL работает как отдельная программа-сервер: приложение подключается к ней по сети, передает запросы и получает ответы. SQLite устроена иначе. Это библиотека на языке C, которая встраивается прямо в приложение и читает и пишет файл базы на диске сама. Нет ни сервера, ни порта, ни пользователей с паролями.

Вся база, то есть таблицы, индексы, представления и триггеры, лежит в одном файле с любым расширением, чаще .db, .sqlite или .sqlite3. Формат файла одинаковый на Windows, Linux, macOS и мобильных системах, поэтому базу можно просто скопировать на другой компьютер. Исходный код SQLite передан в общественное достояние, ее можно использовать в любых проектах без лицензионных отчислений.

Несмотря на компактность, SQLite поддерживает основную часть стандарта SQL: транзакции с гарантиями ACID, индексы, подзапросы, JOIN, представления, триггеры, оконные функции и общие табличные выражения (WITH).

Где применяется SQLite

По оценке разработчиков, SQLite - самая распространенная СУБД в мире: она есть в каждом смартфоне и почти в каждом браузере. Типичные сценарии использования:

Сравнение с серверными СУБД

SQLite не конкурирует с PostgreSQL и MySQL напрямую, у них разные задачи. Серверная СУБД рассчитана на много клиентов, которые одновременно пишут в базу по сети. SQLite заменяет не сервер баз данных, а функцию open(): это способ надежно хранить данные приложения.

КритерийSQLitePostgreSQL, MySQL
УстановкаНе нужна, библиотека внутри программыОтдельный сервер и его настройка
ХранениеОдин файлКаталог данных под управлением сервера
Одновременная записьОдин пишущий процесс в момент времениМного параллельных записей
Пользователи и праваНет, доступ определяют права на файлРоли, пароли, права на таблицы
Доступ по сетиНетДа
ТипизацияГибкая, тип у значенияСтрогая, тип у столбца

Главное ограничение - запись. Пока одна транзакция пишет, остальные ждут, а при долгом ожидании получают ошибку database is locked. Режим журнала WAL (PRAGMA journal_mode = WAL) позволяет читать параллельно с записью, но писатель по-прежнему один. Если приложение принимает много одновременных записей от разных пользователей, лучше сразу выбрать серверную СУБД.

Особенности типов и ограничений

В SQLite пять классов хранения: NULL, INTEGER, REAL, TEXT и BLOB. Тип, указанный при создании столбца, задает лишь предпочтение. В столбец INTEGER можно записать строку "abc", и ошибки не будет. Отдельных типов BOOLEAN и DATETIME нет: логические значения хранят как 0 и 1, даты как текст в формате ISO или как число. Подробности в статье про типы данных SQLite.

Начиная с версии 3.37 можно объявить таблицу с ключевым словом STRICT, тогда SQLite проверяет типы так же жестко, как серверные СУБД.

CREATE TABLE users (
    id    INTEGER PRIMARY KEY,
    name  TEXT NOT NULL,
    age   INTEGER
) STRICT;

Еще одна особенность, о которой часто забывают: проверка внешних ключей по умолчанию выключена. Чтобы SQLite не давала вставить ссылку на несуществующую строку, после каждого подключения выполняют PRAGMA foreign_keys = ON. Команда ALTER TABLE тоже ограничена: можно переименовать таблицу или столбец, добавить и удалить столбец, а для остального таблицу пересоздают.

Первая база на Python

Для работы с SQLite в Python ничего устанавливать не нужно: модуль sqlite3 входит в стандартную библиотеку. Функция connect() открывает файл базы, а если его нет, создает новый.

import sqlite3

conn = sqlite3.connect("library.db")
conn.execute("""
    CREATE TABLE IF NOT EXISTS books (
        id     INTEGER PRIMARY KEY,
        title  TEXT NOT NULL,
        year   INTEGER
    )
""")
books = [("Мастер и Маргарита", 1967), ("Пикник на обочине", 1972)]
conn.executemany("INSERT INTO books (title, year) VALUES (?, ?)", books)
conn.commit()

for row in conn.execute("SELECT id, title, year FROM books ORDER BY year"):
    print(row)
conn.close()
# (1, 'Мастер и Маргарита', 1967)
# (2, 'Пикник на обочине', 1972)

Значения в запрос передаются через знаки ?, а не подстановкой в строку. Так модуль сам экранирует данные, и SQL-инъекция невозможна. Без вызова commit() вставленные строки не сохранятся в файле. Подробный разбор подключения, курсоров и транзакций есть в статье Python sqlite, а синтаксис выборки в материале про оператор SELECT.

Инструменты для просмотра базы

Файл SQLite удобно открывать не только из кода. Консольная утилита sqlite3 с официального сайта sqlite.org принимает SQL-запросы и служебные команды с точкой: .tables показывает список таблиц, .schema их структуру, .quit завершает работу.

Для работы мышкой есть графические программы. Самая популярная бесплатная - DB Browser for SQLite: в ней можно создать таблицы, просмотреть и отредактировать строки, выполнить запрос и экспортировать данные в CSV. Также SQLite поддерживают универсальные клиенты вроде DBeaver и встроенные инструменты баз данных в IDE.

Частые вопросы

Короткие ответы на вопросы, которые задают при знакомстве с SQLite.

Нужно ли устанавливать SQLite для работы из Python?

Нет. Модуль sqlite3 и сама библиотека SQLite поставляются вместе с Python. Версию движка можно узнать так: sqlite3.sqlite_version.

Какой максимальный размер базы SQLite?

Теоретический предел около 281 терабайта. На практике раньше упираются в ограничения файловой системы и в то, что большие объемы удобнее обслуживать серверной СУБД.

Подходит ли SQLite для сайта?

Для сайта, где в основном читают, а пишут редко, подходит хорошо. Для сервиса с частыми одновременными записями от многих пользователей лучше PostgreSQL или MySQL, потому что SQLite пропускает только одного пишущего за раз.

Как защитить базу SQLite паролем?

В стандартной сборке шифрования и паролей нет, доступ к данным определяется правами на файл. Для шифрования используют отдельные сборки, например SQLCipher.