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

✅ Решения

📁 Блок: 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(), записать лишний индекс в таблицу, вставлять значения строкой вместо параметров ?.

Полное решение практической работы

import pandas as pd
import sqlite3

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)

db_path = 'example_database.db'
conn = sqlite3.connect(db_path)
employees_df.to_sql('employees', conn, if_exists='replace', index=False)

Запросы

query1 = 'SELECT * FROM employees;'
df1 = pd.read_sql_query(query1, conn)
print('1. Все данные из таблицы:')
print(df1)

query2 = 'SELECT * FROM employees WHERE age > 30;'
df2 = pd.read_sql_query(query2, conn)
print('\n2. Сотрудники старше 30 лет:')
print(df2)

query3 = 'SELECT * FROM employees WHERE salary > 60000;'
df3 = pd.read_sql_query(query3, conn)
print('\n3. Сотрудники с зарплатой больше 60000:')
print(df3)

query4 = 'SELECT * FROM employees ORDER BY age;'
df4 = pd.read_sql_query(query4, conn)
print('\n4. Сотрудники, упорядоченные по возрасту:')
print(df4)

query5 = 'SELECT AVG(salary) AS avg_salary FROM employees;'
df5 = pd.read_sql_query(query5, conn)
print('\n5. Средняя зарплата сотрудников:')
print(df5)

query6 = 'SELECT COUNT(id) AS number_employees FROM employees;'
df6 = pd.read_sql_query(query6, conn)
print('\n6. Количество сотрудников:')
print(df6)

conn.close()

Первые три запроса возвращают строки, четвёртый меняет порядок выдачи, пятый и шестой возвращают агрегированные значения.