← К оглавлению занятия

💻 Примеры

📁 Блок: SQL / SQLite / Google Colab ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя

⚡ Кратко: суть занятия

SQLite — лёгкая реляционная база данных без отдельного сервера: в Colab она хранится в обычном файле .db.

В Python подключение создаётся через sqlite3.connect('example_database.db'), а запросы выполняются через курсор или pandas.

Для изменений нужен conn.commit(): без него таблица или вставленные строки могут не сохраниться.

Минимальный пример: создать DataFrame, записать его через df.to_sql('employees', conn, if_exists='replace', index=False), затем прочитать через pd.read_sql_query().

SQL-запросы из занятия повторяют базовые действия: SELECT *, фильтр WHERE, сортировку ORDER BY, AVG и COUNT.

pandas удобен как мост: таблица живёт в DataFrame, а SQLite даёт возможность тренировать обычный SQL.

Топ-3 ошибки: забыть commit(), записать лишний индекс в таблицу, вставлять значения строкой вместо параметров ?.

Пример 1: создать таблицу и добавить строку

import sqlite3

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

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER,
    email TEXT
)
''')

cursor.execute(
    'INSERT INTO users (name, age, email) VALUES (?, ?, ?)',
    ('John Doe', 25, 'johndoe@example.com')
)
conn.commit()

Здесь IF NOT EXISTS добавлен, чтобы повторный запуск ячейки не падал из-за уже созданной таблицы.

Проверить по документации. Конструкция IF NOT EXISTS не приведена в источнике, она добавлена как практическое улучшение для повторного запуска ячеек Colab.

Пример 2: прочитать строки через курсор

cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
    print(row)

Ожидаемый результат — кортежи Python, по одному на каждую строку таблицы.

Пример 3: записать DataFrame и читать SQL в DataFrame

import pandas as pd

data = {
    'id': [1, 2, 3, 4, 5],
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 30, 35, 40, 45],
    'salary': [50000, 60000, 70000, 80000, 90000]
}

employees_df = pd.DataFrame(data)
employees_df.to_sql('employees', conn, if_exists='replace', index=False)

query = 'SELECT * FROM employees WHERE age > 30;'
older_employees = pd.read_sql_query(query, conn)
older_employees

Результат — строки сотрудников старше 30 лет: Charlie, David и Eve.