← Назад к вопросам

Что такое SQLite?

2.0 Middle🔥 191 комментариев
#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое SQLite?

SQLite — это легкая, встроенная, файловая система управления базами данных (СУБД), которая не требует отдельного сервера. SQLite является самой распространённой SQL-базой данных в мире, так как встроена в браузеры, мобильные устройства и множество приложений.

Основные характеристики

1. Встроенная (Embedded)

SQLite встраивается непосредственно в приложение, не требуя отдельного процесса сервера БД. Это делает её идеальной для небольших приложений и мобильных устройств.

import sqlite3

# Создание/подключение к БД - просто один файл
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()

# Создание таблицы
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        email TEXT UNIQUE,
        age INTEGER
    )
''')

connection.commit()
connection.close()

2. Файловая

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

# Файл my_database.db содержит всю БД
# Легко скопировать: cp my_database.db backup.db
# Легко передать: scp my_database.db user@host:/path/

3. Serverless (Без сервера)

Не требует установки и запуска отдельного сервера БД. Это значительно упрощает развёртывание и администрирование.

4. ACID-совместимость

SQLite поддерживает ACID (Atomicity, Consistency, Isolation, Durability) для обеспечения целостности данных:

import sqlite3

connection = sqlite3.connect('bank.db')
cursor = connection.cursor()

try:
    # Начало транзакции (автоматично в SQLite)
    cursor.execute('UPDATE accounts SET balance = balance - 100 WHERE id = 1')
    cursor.execute('UPDATE accounts SET balance = balance + 100 WHERE id = 2')
    
    # Все изменения или ничего (Atomicity)
    connection.commit()
except Exception as e:
    connection.rollback()
    print(f"Ошибка: {e}")
finally:
    connection.close()

Когда использовать SQLite

Подходит для:

  • Мобильных приложений (iOS, Android)
  • Встроенных систем
  • Небольших приложений (до миллионов записей)
  • Десктопных приложений
  • Прототипирования
  • Тестирования
  • Локальной работы без интернета

Не подходит для:

  • Высоконагруженных систем с большим количеством пользователей
  • Масштабируемых веб-приложений
  • Когда требуется репликация данных
  • Очень больших баз данных (> 10 ГБ на одном устройстве)

Практические примеры

Пример 1: Простое CRUD

import sqlite3

def create_connection():
    return sqlite3.connect('example.db')

def insert_user(name, email, age):
    conn = create_connection()
    cursor = conn.cursor()
    cursor.execute('INSERT INTO users (name, email, age) VALUES (?, ?, ?)',
                   (name, email, age))
    conn.commit()
    conn.close()

def get_users():
    conn = create_connection()
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users')
    users = cursor.fetchall()
    conn.close()
    return users

# Использование
insert_user('Иван', 'ivan@example.com', 30)
insert_user('Мария', 'maria@example.com', 25)

for user in get_users():
    print(user)

Пример 2: SQLAlchemy ORM с SQLite

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String, unique=True)

# Создание БД
engine = create_engine('sqlite:///mydb.db')
Base.metadata.create_all(engine)

# Работа с данными
Session = sessionmaker(bind=engine)
session = Session()

# Добавление
new_user = User(name='Петр', email='petr@example.com')
session.add(new_user)
session.commit()

# Чтение
users = session.query(User).all()
for user in users:
    print(f"{user.name} - {user.email}")

session.close()

Пример 3: Context manager для безопасной работы

from contextlib import contextmanager
import sqlite3

@contextmanager
def get_db_connection(db_name):
    conn = sqlite3.connect(db_name)
    try:
        yield conn
    finally:
        conn.close()

# Использование
with get_db_connection('app.db') as conn:
    cursor = conn.cursor()
    cursor.execute('SELECT COUNT(*) FROM users')
    count = cursor.fetchone()[0]
    print(f"Пользователей: {count}")

Ограничения SQLite

  1. Конкурентность — не оптимальна для высокой конкурентности (много одновременных писателей)
  2. Масштабируемость — медленнее на очень больших базах данных
  3. Сетевой доступ — нет встроенной поддержки работы через сеть
  4. Пользователи и права — минимальная система ролей и прав доступа

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

ПараметрSQLitePostgreSQLMySQL
УстановкаВстроеннаяТребует установкиТребует установки
ФайлыОдин файлНесколько файловНесколько файлов
МасштабируемостьНизкаяВысокаяСредняя
ФункциональностьБазоваяПродвинутаяСредняя
КонкурентностьОграниченнаяОтличнаяХорошая

Современное использование

SQLite широко используется в:

  • Мобильных приложениях — встроена в iOS и Android
  • Браузерах — Firefox использует SQLite для хранения данных
  • Десктопных приложениях — многие приложения используют SQLite
  • IoT устройствах — благодаря малому размеру и эффективности
  • Временных хранилищах — кэширование данных в приложениях

SQLite — это отличный выбор для начинающих разработчиков и прототипирования, однако при масштабировании требуется переход на более мощные СУБД.

Что такое SQLite? | PrepBro