Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое 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
- Конкурентность — не оптимальна для высокой конкурентности (много одновременных писателей)
- Масштабируемость — медленнее на очень больших базах данных
- Сетевой доступ — нет встроенной поддержки работы через сеть
- Пользователи и права — минимальная система ролей и прав доступа
Сравнение с другими СУБД
| Параметр | SQLite | PostgreSQL | MySQL |
|---|---|---|---|
| Установка | Встроенная | Требует установки | Требует установки |
| Файлы | Один файл | Несколько файлов | Несколько файлов |
| Масштабируемость | Низкая | Высокая | Средняя |
| Функциональность | Базовая | Продвинутая | Средняя |
| Конкурентность | Ограниченная | Отличная | Хорошая |
Современное использование
SQLite широко используется в:
- Мобильных приложениях — встроена в iOS и Android
- Браузерах — Firefox использует SQLite для хранения данных
- Десктопных приложениях — многие приложения используют SQLite
- IoT устройствах — благодаря малому размеру и эффективности
- Временных хранилищах — кэширование данных в приложениях
SQLite — это отличный выбор для начинающих разработчиков и прототипирования, однако при масштабировании требуется переход на более мощные СУБД.