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

💻 Примеры

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

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

Практикум 13 закрепляет связку Colab → pandas → SQLite → SQL-запрос.

Источник просит создать таблицу погоды за последние 7 дней и включить дату, дневную и ночную температуру, световой день, ветер, влажность и давление.

В коде лучше использовать английские имена столбцов: date, day_temp_c, night_temp_c, humidity_pct и другие.

После создания weather_df таблица записывается в SQLite через to_sql('weather', conn, if_exists='replace', index=False).

Минимальные запросы практикума: все строки, последние 3 дня, средняя ночная температура, день с максимальной влажностью.

Для последних 3 дней используется ORDER BY date DESC LIMIT 3, потому что в таблице есть 7 дат.

Топ-3 ошибки: не отсортировать даты перед LIMIT, оставить пробелы/кириллицу в SQL-именах, забыть закрыть подключение.

Рабочий пример таблицы погоды

import pandas as pd
import sqlite3
from datetime import datetime, timedelta

today = datetime.now()
dates = [today - timedelta(days=i) for i in range(7)]

data = {
    'date': [day.strftime('%Y-%m-%d') for day in dates],
    'day_temp_c': [23, 25, 22, 20, 21, 24, 26],
    'night_temp_c': [15, 16, 14, 13, 15, 17, 18],
    'daylight_hours': [14, 14, 13, 13, 14, 14, 13],
    'wind_speed_m_s': [5, 6, 7, 5, 4, 6, 7],
    'humidity_pct': [65, 70, 68, 72, 71, 69, 66],
    'pressure_mm_hg': [1012, 1015, 1013, 1011, 1014, 1016, 1013]
}

weather_df = pd.DataFrame(data)
weather_df

Запись в SQLite

db_path = 'weather_database.db'
conn = sqlite3.connect(db_path)
weather_df.to_sql('weather', conn, if_exists='replace', index=False)

Запросы

queries = {
    'all_rows': 'SELECT * FROM weather;',
    'last_3_days': 'SELECT * FROM weather ORDER BY date DESC LIMIT 3;',
    'avg_night_temp': 'SELECT AVG(night_temp_c) AS avg_night_temp_c FROM weather;',
    'max_humidity_day': 'SELECT date, humidity_pct FROM weather ORDER BY humidity_pct DESC LIMIT 1;'
}

for name, query in queries.items():
    print(f'--- {name} ---')
    print(pd.read_sql_query(query, conn))