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

К какой группе БД относится SQLite

1.0 Junior🔥 111 комментариев
#Базы данных (SQL)

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

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

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

К какой группе БД относится SQLite

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

Классификация БД и место SQLite

По архитектуре:

1. Встроенные (Embedded) БД

  • SQLite, LevelDB, RocksDB
  • Работают как библиотека в приложении
  • Нет отдельного сервера
  • Данные хранятся в одном файле (обычно)

2. Клиент-серверные БД

  • PostgreSQL, MySQL, Oracle
  • Отдельный процесс-сервер
  • Сетевое взаимодействие
  • Несколько клиентов могут работать одновременно
# Встроенная БД (SQLite)
import sqlite3

conn = sqlite3.connect('database.db')  # Прямое подключение к файлу
cursor = conn.cursor()
cursor.execute('CREATE TABLE users (id INTEGER, name TEXT)')
conn.commit()

# Клиент-серверная БД (PostgreSQL)
import psycopg2

conn = psycopg2.connect(
    host='localhost',
    port=5432,
    database='mydb',
    user='postgres',
    password='password'
)  # Подключение через сеть

По типу хранилища:

1. Файловые (File-based)

  • SQLite
  • BerkeleyDB
  • Access
  • Данные хранятся в файлах на диске

2. Сетевые (Network-based)

  • PostgreSQL, MySQL, Oracle, MongoDB
  • Данные хранятся на сервере
  • Доступ через сеть

3. In-Memory (оперативная память)

  • SQLite (с параметром :memory:)
  • Redis
  • Memcached
  • Очень быстрые, но данные теряются при отключении
import sqlite3

# Файловая БД
conn_file = sqlite3.connect('my_database.db')

# In-memory БД (только для текущей сессии)
conn_memory = sqlite3.connect(':memory:')

# Временная БД
conn_temp = sqlite3.connect('')  # Автоматически удаляется при закрытии

Характеристики SQLite

import sqlite3
import os

# Проверка версии
print(sqlite3.sqlite_version)  # Версия SQLite
print(sqlite3.version)         # Версия python-sqlite3

# Информация о БД
conn = sqlite3.connect('test.db')
print(os.path.getsize('test.db'))  # Размер файла БД

# SQLite имеет динамическую типизацию
conn.execute('CREATE TABLE dynamic (id, value, data)')
conn.execute('INSERT INTO dynamic VALUES (1, "text", 100)')
conn.execute('INSERT INTO dynamic VALUES (2, 999, "string")')
results = conn.execute('SELECT * FROM dynamic').fetchall()
print(results)  # Может хранить разные типы в одном столбце

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

ХарактеристикаЗначение
АрхитектураВстроенная (embedded)
ХранилищеФайловое (.db)
ДоступСинхронный, из приложения
Тип БДРеляционная
ТипизацияДинамическая
Многопользовательский доступОграниченный (file-level locking)
ПотокобезопасностьОграниченная
Размер БДДо 140 Тб (теоретически)
Язык запросовSQL
ACIDДа
ЛицензияPublic Domain (открытый исходный код)

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

import sqlite3
from datetime import datetime

class UserRepository:
    def __init__(self, db_path='users.db'):
        self.conn = sqlite3.connect(db_path)
        self.conn.row_factory = sqlite3.Row  # Возвращает строки как словари
        self._init_db()
    
    def _init_db(self):
        """Инициализация БД"""
        self.conn.execute('''
            CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                email TEXT UNIQUE,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        ''')
        self.conn.commit()
    
    def add_user(self, name, email):
        """Добавить пользователя"""
        cursor = self.conn.cursor()
        cursor.execute(
            'INSERT INTO users (name, email) VALUES (?, ?)',
            (name, email)
        )
        self.conn.commit()
        return cursor.lastrowid
    
    def get_user(self, user_id):
        """Получить пользователя"""
        cursor = self.conn.cursor()
        cursor.execute('SELECT * FROM users WHERE id = ?', (user_id,))
        return dict(cursor.fetchone() or {})
    
    def list_users(self):
        """Получить всех пользователей"""
        cursor = self.conn.cursor()
        cursor.execute('SELECT * FROM users ORDER BY created_at DESC')
        return [dict(row) for row in cursor.fetchall()]
    
    def close(self):
        self.conn.close()

# Использование
repo = UserRepository()
user_id = repo.add_user('John Doe', 'john@example.com')
user = repo.get_user(user_id)
print(user)
repo.close()

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

✓ Используй SQLite для:

  • Мобильных приложений (iOS, Android)
  • Настольных приложений (Electron, PyQt)
  • Локальных утилит и скриптов
  • Прототипирования и тестирования
  • Кэширования данных
  • Небольших приложений (< 100k одновременных пользователей)
  • Single-machine applications
# Пример: Приложение для отслеживания задач
import sqlite3

conn = sqlite3.connect(':memory:')  # Для демонстрации используем in-memory

conn.execute('''
    CREATE TABLE tasks (
        id INTEGER PRIMARY KEY,
        title TEXT NOT NULL,
        completed BOOLEAN DEFAULT 0,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
''')

# Добавляем задачи
conn.execute("INSERT INTO tasks (title) VALUES ('Buy groceries')")
conn.execute("INSERT INTO tasks (title) VALUES ('Write report')")
conn.commit()

# Запрашиваем задачи
tasks = conn.execute('SELECT * FROM tasks WHERE completed = 0').fetchall()
print(tasks)

✗ НЕ используй SQLite для:

  • Веб-приложений с множеством одновременных пользователей
  • Приложений с интенсивной записью данных
  • Распределённых систем
  • Требований к масштабируемости на несколько серверов
  • Высоконагруженных систем

Альтернативы и сравнение

            | SQLite | PostgreSQL | MySQL | MongoDB
            |————————|————————————|———————|—————————
Тип         | File   | Network   | Network | NoSQL
Множество   | 1      | Много     | Много | Много
пользователей
Производ.   | Высокая| Средняя   | Средняя | Высокая
Масштабл.   | Низкая | Высокая   | Высокая | Высокая
SQLAlchemy  | ✓      | ✓         | ✓     | Через
                                    SQLAlchemy

Вывод

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