yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareML SpaceВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Облако для мобильных и веб‑приложенийАналитика данных в облакеEvolution Bare MetalEvolution SSH KeysEvolution ImageСайт в облакеEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskХранение данных в облакеEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkАналитика данных в облакеEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSEvolution TagsEvolution Task HistoryCloud MonitoringCloud LoggingАренда GPUAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLРазработка и тестирование в облакеAdvanced Image Management ServiceAdvanced Auto ScalingDirect ConnectCDNCross-platform connectionAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerCloud AdvisorAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: сервер Bare MetalИнфраструктура для 1С в облакеУдаленные рабочие столыМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингVMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Поиск
Связаться с нами

SQLite в Python: создание, управление и оптимизация баз данных

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

Инструкции
Иллюстрация для статьи на тему «SQLite в Python: создание, управление и оптимизация баз данных»
Продукты из этой статьи:
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®

Начало работы с SQLite в Python

SQLite — это легкая база данных, которая хранится в одном файле и не требует установки отдельного сервера. Для работы с ней в Python используется встроенная библиотека sqlite3, которая включена в стандартную поставку Python начиная с версии 2.5 и доступна во всех современных версиях, включая Python 3.12 и 3.13. 

Установка и настройка Python

Чтобы начать использовать SQLite:

  • Перейдите на официальный сайт python.org/downloads.

  • Скачайте и установите последнюю стабильную версию Python для вашей операционной системы.

  • При установке отметьте пункт Add Python to PATH, чтобы команда python была доступна в терминале.

  • Проверьте установку — в разных системах команды могут отличаться:

Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

Если вы видите номер версии — Python установлен корректно.

Теперь можно проверить встроенную поддержку SQLite:

Команда выведет текущую версию встроенной SQLite.

Создание новой базы данных и подключение к существующей

Чтобы подключиться к базе данных, используйте функцию sqlite3.connect(). Если файл базы данных существует — соединение откроется, а если файла нет — SQLite создаст новый.

В этом примере файл my_database.db создается в текущей рабочей папке. Чтобы поместить базу в другое место — укажите полный путь, например:

После выполнения операций с базой не забудьте закрыть соединение:

Альтернатива — использовать контекстный менеджер, который сам закрывает соединение:

Evolution Managed PostgreSQL
Evolution Managed PostgreSQL
Легко управляйте и масштабируйте базы данных в пару кликов: оперативно увеличивайте vCPU, RAM и дисковое пространство, если нагрузка на базу данных возросла.
Узнать больше

Создание таблицы

Теперь создадим простую таблицу users с тремя столбцами:

  • id — уникальный идентификатор (целое число с автонумерацией);

  • name — имя пользователя (текст);

  • age — возраст (целое число).

В этом примере AUTOINCREMENT гарантирует, что идентификаторы не будут переиспользоваться, а команда commit() записывает изменения в файл базы данных.

Основные типы данных в SQLite

SQLite поддерживает динамическую типизацию — при этом тип данных определяется значением, а не столбцом. Тем не менее, каждая колонка имеет тип привязки (type affinity), который определяет, как хранятся данные по умолчанию. 

NULL

Используется, если данные отсутствуют.

Вставка пустого значения:

INTEGER

Хранит целые числа (до 8 байт, со знаком).

REAL

Хранит числа с плавающей точкой (десятичные значения).

TEXT

Хранит текстовые данные (строки любого размера, ограничены только памятью).

BLOB

Используется для хранения двоичных данных — изображений, файлов и т.п.

Создание таблицы с разными типами данных

Теперь создадим таблицу products, которая объединит все типы данных SQLite. Каждый столбец будет демонстрировать использование одного из типов: INTEGER, REAL, TEXT, BLOB.

Пример таблицы products:

Расшифровка столбцов:

  • product_id (INTEGER) — первичный ключ таблицы и идентификатор товара.

  • product_name (TEXT) — название товара.

  • price (REAL) — цена товара в виде чисел с плавающей точкой.

  • quantity (INTEGER) — количество товара на складе.

  • description (TEXT)  — описание товара.

  • image (BLOB) — изображение товара в виде бинарного потока данных.

  • manufacture_date (TEXT) — дата производства товара в формате YYYY-MM-DD.

  • discontinued (INTEGER) — статус товара, доступность. Если позиция отсутствует на складе, в поле будет значение NULL. 

В SQLite тип даты — это текст, поэтому формат лучше задавать явно (YYYY-MM-DD). Если нужно работать с датами как с числами, можно использовать Unix timestamp (INTEGER).

Добавление данных (INSERT)

Добавим несколько записей в таблицу:

После вставки данных вы получите такой результат:

product_id
product_name
price
quantity
description
image
manufacture_date
discontinued
1
Smartphone
499.99
150
Latest model with OLED display
(BLOB данных, изображение в бинарном формате)
2023-03-01
0
2
Laptop
799.99
80
High performance laptop for gaming
(BLOB данных, изображение в бинарном формате)
2022-11-15
0
3
Headphones
149.99
200
Noise-canceling over-ear headphones
(BLOB данных, изображение в бинарном формате)
2023-01-10
0

Работа с данными в SQLite

Теперь разберем основные команды для управления содержимым таблиц.

Вставка данных — INSERT

Синтаксис:

Пример:

Можно добавить несколько строк за один запрос:

Обновление данных — UPDATE

Синтаксис:

Пример:

Обновит только строки, где name = 'Bob'. При этом без WHERE будут изменены все записи таблицы.

Удаление данных — DELETE

Синтаксис:

Пример:

Пример комплексной работы с таблицей employees:

1. Создаем таблицу.

2. Добавляем данные.

Теперь таблица employees выглядит так:

Id
Name
Age
Department
1
Alice
28
HR
2
Bob
35
IT
3
Charlie
40
Finance

3. Обновляем данные.

После выполнения запроса таблица будет выглядеть так:

Id
Name
Age
Department
1
Alice
28
HR
2
Bob
36
IT
3
Charlie
40
Finance

Возраст сотрудника Bob обновился до 36 лет. Предположим, что данные о сотруднике Charlie больше не нужны. Для удаления записи используется оператор DELETE:

После выполнения запроса таблица будет выглядеть так:

Id
Name
Age
Department
1
Alice
28
HR
2
Bob
36
IT

Запись о Charlie удалилась из таблицы.

Извлечение данных с помощью SQL-запросов

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

SELECT

Главная команда для выборок в SQL — это SELECT. Она используется для получения данных из таблицы и может возвращать как все столбцы, так и лишь определенные поля.

Синтаксис:

Пример — выбор всех данных:

Этот запрос извлекает все строки и столбцы из таблицы employees.

FROM

Ключевое слово FROM указывает, из какой таблицы нужно получить данные. Она всегда используется вместе с SELECT.

Пример — выбор отдельных столбцов:

Этот запрос вернет только имена и возраст сотрудников. Если в таблице есть больше столбцов (например, id, department), они в результат не попадут.

Фильтрация данных — оператор WHERE

Оператор WHERE задает условия фильтрации. Он позволяет выбрать только те строки, которые соответствуют заданному критерию.

Синтаксис:

Пример — сотрудники старше 30 лет:

Запрос вернет все строки, где значение age больше 30. 

В SQLite можно использовать стандартные операторы сравнения: =, >, <, >=, <=, <> (не равно), BETWEEN, LIKE, IN.

Логические операторы AND и OR

Операторы AND и OR позволяют комбинировать несколько условий в одном запросе:

  • AND — оба условия должны быть истинными.

  • OR — хотя бы одно из условий должно быть истинным.

Пример с AND — сотрудники отдела IT старше 30 лет:

Пример с OR — сотрудники старше 30 лет или из отдела HR: 

Оба примера корректны и дают предсказуемый результат в SQLite.

При комбинировании условий можно использовать скобки для управления приоритетом: WHERE (department = 'HR' OR department = 'IT') AND age > 25;.

Сортировка данных — ORDER BY

Оператор ORDER BY сортирует результаты запроса по возрастанию (ASC) или по убыванию (DESC).По умолчанию сортировка выполняется в порядке возрастания.

Синтаксис:

Пример — сортировка по возрасту (по возрастанию):

Пример — сортировка по убыванию:

Оба варианта рабочие.

Можно сортировать сразу по нескольким полям:

С помощью команды будет произведена сортировка по отделу, а внутри отдела — по возрасту (от старшего к младшему).

Ограничение количества строк — LIMIT

Оператор LIMIT позволяет получить только указанное количество строк из результата запроса. Особенно полезно при тестировании или постраничном отображении данных.

Синтаксис:

Пример — получить первых пять сотрудников:

SQLite вернет только первые пять записей из таблицы employees. 

Можно добавить OFFSET, чтобы пропустить первые N строк:

Оптимизация запросов и управление производительностью

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

Использование индексов

Индекс — это структура данных, которая позволяет SQLite быстро находить нужные записи по значениям одного или нескольких столбцов. Он похож на алфавитный указатель в книге: помогает искать быстрее, но требует места и обновляется при каждом изменении данных.

Когда стоит использовать индексы

Если таблица содержит действительно много записей — от тысячи и больше, для нее могут пригодиться запросы вида SELECT ... WHERE column = value, а также сортировка (ORDER BY) или связи по ключам.

Для примера создадим таблицу users и добавим индекс на столбец name:

Этот код создает таблицу users и индекс idx_name для ускоренного поиска по полю name. Параметр IF NOT EXISTS предотвращает ошибку, если индекс уже существует.

Добавление данных и использование индекса

Теперь добавим несколько строк и выполним поиск по индексу:

Чтобы проверить, что индекс реально используется, нужно ввести:

Если в выводе появится USING INDEX, значит SQLite применяет индекс при поиске.

Удаление индекса

Если индекс больше не нужен, его можно удалить командой:

Пример полного алгоритма — создание базы, таблицы, индекса, вставка данных, поиск и удаление индекса:

Этот код можно запускать целиком — он создает базу, индекс, выводит результат поиска и корректно закрывает соединение.

Транзакции и управление данными

В SQLite есть такое понятие, как транзакции. Это несколько операций, объединенных в один логический блок. Транзакции упрощают управление базами данных и гарантируют целостность информации.

Транзакции основаны на принципах ACID:

  • Atomicity (Атомарность). Транзакция выполняется полностью либо не выполняется вообще.

  • Consistency (Согласованность). После завершения транзакции база данных всегда находится в согласованном состоянии.

  • Isolation (Изоляция). Каждая транзакция выполняется независимо от других транзакций.

  • Durability (Долговечность). После завершения транзакции все изменения сохраняются в базе данных.

 Пример транзакции:

Если оба запроса выполняются успешно — изменения фиксируются (COMMIT). Если хотя бы один запрос вызовет ошибку — SQLite откатит всё (ROLLBACK).

Ручное управление транзакциями в SQL

Можно управлять транзакциями прямо из SQL:

По умолчанию SQLite работает в автоматическом режиме транзакций (autocommit). Если вы не используете BEGIN, каждая команда фиксируется сразу.

Продвинутые техники работы с SQLite в Python

В этом разделе рассмотрим методы, которые открывают более широкие возможности для безопасной и эффективной работы с базой данных — подготовленные запросы, представления, триггеры и методы выборки данных.

Использование Prepared Statements

Prepared Statement — это предварительно скомпилированный SQL-шаблон, в который при выполнении можно подставлять разные значения. Это ускоряет работу с повторяющимися запросами и защищает от SQL-инъекций.

Пример использования:

Этот код безопасен и корректен. Использование ? вместо конкатенации строк предотвращает SQL-инъекции, а SQLite сам оптимизирует многократные вызовы одного запроса.

Работа с представлениями (Views)

Представления — это виртуальные таблицы, которые хранят результаты SQL-запросов. Они не содержат данные напрямую, а просто ссылаются на запрос, который их формирует.

Использование представлений помогает:

  • упростить сложные SQL-запросы;

  • повторно использовать одну выборку;

  • повысить читаемость и удобство.

Пример создания представления:

После этого можно обращаться к представлению, как к обычной таблице:

В SQLite представления используются только для чтения — вы не можете напрямую изменять данные через них. Для редактирования применяются реальные таблицы.

Работа с триггерами (Triggers)

Триггеры — это автоматические процедуры, которые выполняются при определенных событиях: например, при добавлении, обновлении или удалении данных. Они часто используются для логирования изменений или поддержания связей между таблицами.

Создадим таблицу logs и триггер, который будет записывать сообщение при добавлении нового пользователя.

Таблица для логов:

Триггер, срабатывающий после вставки данных в users:

Теперь при каждом INSERT в таблицу users в таблицу logs автоматически добавляется запись.

Также в SQLite триггеры могут быть связаны с событиями:

Обработка результатов запросов (методы fetch)

Извлекать записи из результатов выборки помогут команды fetchone(), fetchmany() и fetchall(). В таблице описано, как они работают.

Метод
Описание
Пример
fetchone()
Возвращает следующую строку из результата. Если данных больше нет, команда возвращает None
row = cursor.fetchone()
fetchmany(n)
Возвращает заданное число строк результата
rows = cursor.fetchmany(5)
fetchall()
Возвращает все строки результата в виде списка кортежей
rows = cursor.fetchall()

Пример использования fetch-методов:

Если данных в таблице нет — методы возвращают None или пустой список. Поэтому при работе с fetchone() полезно проверять результат:

Создание простого приложения (пример)

Давайте создадим простое консольное приложение для управления списком задач (To-Do List), которое демонстрирует все рассмотренные техники работы с SQLite в Python.

Сперва создайте базу данных: 

Примените методы: 

А теперь используйте базу и методы: 

Интеграция SQLite с другими библиотеками

SQLite отлично сочетается с библиотекой Pandas, которая используется для анализа и обработки табличных данных в Python. Такой дуэт позволяет быстро извлекать данные из базы, анализировать их и при необходимости обратно обновлять таблицы.

Извлечение данных из SQLite в Pandas

Рассмотрим пример на таблице sales, где хранятся данные о продажах. Создадим таблицу, добавим записи, извлечем их через Pandas и выведем результат.

После запуска этого кода на экране появится таблица продаж в виде DataFrame Pandas:

id
product_name
amount
price
1
Product A
10
15.5
2
Product B
5
25.0
3
Product C
8
15.5
4
Product D
3
40.0

Анализ данных с помощью Pandas

Теперь рассчитаем общую сумму продаж по каждому продукту.

Результат:

Product_name
Total_sales
Product A
279.5
Product B
125.0
Product C
120.0

Pandas позволяет выполнять агрегатные операции значительно проще, чем SQL, а результаты можно визуализировать, построить графики или выгрузить в Excel.

Обновление данных SQLite через Pandas

Теперь изменим данные в Pandas и обновим таблицу sales в базе данных. Увеличим количество проданных единиц для Product A на 5:

Теперь количество Product A увеличилось — изменения записаны обратно в базу. Этот подход сочетает простоту анализа в Pandas и надежность транзакций SQLite.

Заключение

SQLite в Python представляет собой оптимальное решение для работы со встраиваемыми базами данных, гармонично сочетая простоту освоения с широкими функциональными возможностями. Главная сила технологии заключается в ее универсальности — она работает «из коробки» на всех платформах без необходимости установки дополнительного серверного ПО, что делает SQLite идеальным инструментом для быстрой разработки прототипов, мобильных приложений и выполнения легких аналитических задач.

Для более сложных и высоконагруженных проектов стоит рассмотреть переход на управляемые базы данных, такие как Evolution Managed PostgreSQL®. Этот сервис предлагает нативную поддержку сложных SQL-запросов, встроенные механизмы репликации и профессиональное администрирование, обеспечивая надежную основу для масштабируемых приложений.

Продукты из этой статьи:
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®
23 октября 2025

Вам может понравиться