SQLite3 – встроенная работа с SQLite

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

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

SQLite3 – встроенная работа с SQLite делает создание и использование баз данных таким же простым, как работа с файлами. Это решение особенно полезно для прототипирования, встраиваемых систем, настольных приложений и обучения.

Установка и совместимость

Модуль sqlite3 входит в стандартную библиотеку Python, начиная с версии 2.5, и доступен без дополнительной установки.

Он совместим с Windows, macOS и Linux и обеспечивает интерфейс к SQLite версии 3.

python
import sqlite3

Создание базы данных и подключение

Создание базы данных:

python
conn = sqlite3.connect('my_database.db')

База данных будет создана, если файла не существует.

Создание базы в памяти (удобно для тестирования):

python
conn = sqlite3.connect(':memory:')

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

python
cursor = conn.cursor() cursor.execute(''' CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER ) ''') conn.commit()

Типы данных в SQLite:

  • INTEGER

  • REAL

  • TEXT

  • BLOB

  • NULL

SQLite использует динамическую типизацию, что делает его гибким, но требует аккуратности.

Добавление, чтение, обновление, удаление (CRUD)

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

python
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Иван", 30)) conn.commit()

Выборка данных

python
cursor.execute("SELECT * FROM users") for row in cursor.fetchall(): print(row)

Обновление

python
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (31, "Иван")) conn.commit()

Удаление

python
cursor.execute("DELETE FROM users WHERE name = ?", ("Иван",)) conn.commit()

Чтение результатов запросов

Методы чтения:

  • fetchone() — одна строка

  • fetchall() — список всех строк

  • fetchmany(n) — n строк

Пример:

python
user = cursor.fetchone() print(user[0], user[1])

Контекстные менеджеры и транзакции

Рекомендуется использовать with для автоматического закрытия соединения:

python
with sqlite3.connect('my_database.db') as conn: cursor = conn.cursor() cursor.execute(...)

Изменения сохраняются автоматически, или откатываются при ошибке.

Создание индексов и уникальных ограничений

python
cursor.execute("CREATE UNIQUE INDEX idx_users_name ON users(name)")

Индексы ускоряют поиск, особенно по часто используемым полям.

Работа с датами и временем

python
from datetime import datetime now = datetime.now() cursor.execute("INSERT INTO logs (timestamp) VALUES (?)", (now,))

Можно включить поддержку преобразования:

python
conn = sqlite3.connect("db.db", detect_types=sqlite3.PARSE_DECLTYPES)

Импорт и экспорт данных

Экспорт в CSV

python
import csv cursor.execute("SELECT * FROM users") with open('users.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(cursor.fetchall())

Чтение из CSV

python
with open('users.csv') as f: reader = csv.reader(f) for row in reader: cursor.execute("INSERT INTO users VALUES (?, ?, ?)", row) conn.commit()

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

python
import pandas as pd df = pd.read_sql("SELECT * FROM users", conn) print(df.head())

Также можно сохранять DataFrame в базу:

python
df.to_sql("new_users", conn, index=False, if_exists="replace")

Тестирование с SQLite

SQLite идеально подходит для модульного тестирования:

python
conn = sqlite3.connect(":memory:")

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

Советы по безопасности и производительности

  • Используйте параметризированные запросы (?) — защита от SQL-инъекций.

  • Индексируйте поля, по которым часто происходит выборка.

  • Храните только нужные данные, SQLite не масштабируется горизонтально.

  • Используйте WAL-режим (PRAGMA journal_mode=WAL) для многопоточности.

Сравнение с другими СУБД

Характеристика SQLite PostgreSQL MySQL MongoDB
Установка Не требуется Требуется Требуется Требуется
Масштабируемость Ограниченная Высокая Высокая Очень высокая
Поддержка SQL Полная Полная Полная Нет
Тип хранения Файловая Серверная Серверная Документная
Лучшее применение Локальные приложения, тесты Веб-приложения CRM, ERP Big Data, API

Часто задаваемые вопросы (FAQ)

1. Что такое sqlite3 в Python?
Это встроенный модуль для работы с SQLite базами данных.

2. Нужно ли устанавливать SQLite отдельно?
Нет, он входит в стандартную библиотеку Python.

3. Подходит ли SQLite для продакшена?
Для небольших и локальных приложений — да. Для больших веб-проектов лучше использовать PostgreSQL.

4. Как защититься от SQL-инъекций?
Используйте параметризированные запросы с ? вместо форматирования строк.

5. Можно ли использовать SQLite с Pandas?
Да, Pandas имеет методы read_sql() и to_sql() для работы с SQLite.

6. Как сделать транзакции?
Используйте with sqlite3.connect(...) as conn: — транзакции выполняются автоматически.

Заключение

SQLite3 – встроенная работа с SQLite делает Python ещё более мощным инструментом для быстрой разработки. Благодаря встроенному модулю sqlite3 вы можете начать работу с базой данных без установки стороннего ПО, что особенно удобно для прототипирования, автоматизации и настольных приложений.

SQLite сочетает простоту, стабильность и скорость, делая его отличным выбором для большинства локальных задач.