
Информатика: создаём своего цифрового помощника Урок 54 из 72
Выпуск 1.2: помощник с SQLite
Выпустим помощника 1.2: данные в SQLite, прежние напоминания и тот же локальный веб-экран.
Где мы на карте
Урок 54 из 72, блок «Данные, таблицы и базы» (47–54). Мы продолжаем помощника 1.1 с тремя вымышленными задачами. В конце блока его записи будут храниться в локальном SQLite, а проверенные правила напоминаний останутся прежними.
Ситуация и вопрос
Одноклассник спрашивает: «Мы перенесли задачи в базу, а старые напоминания сохранились?» Проверяем это не обещанием, а сравнением трёх записей, пяти возможных статусов и браузерной страницы.
Новые слова без пропусков
Миграция переносит данные из прежнего формата в новый по явному правилу. Транзакция объединяет изменения: при ошибке набор не должен считаться готовым. Контрольная точка — код, исходные файлы, команда сборки и проверяемый результат. Только чтение означает, что открытие страницы не меняет файл БД. SQLite хранит задачи и занятия в одном файле на вашем компьютере; это не облако и не общая база всех посетителей сайта.
Опорный сигнал
Прочитайте схему слева направо. Для каждой стрелки назовите вход, преобразование и проверку. Закройте третий шаг и предскажите его. Затем найдите соответствующую строку в CSV, SQL или отчёте: нарисованная стрелка не должна подменять реальные значения и связи.
Разбираем шаг за шагом
В step-05 запустите python3 data_assistant.py init, затем python3 data_assistant.py report: строки должны быть t-01 45, t-02 0, t-03 25. Запустите python3 web_assistant.py --port 8765 и откройте дату 2026-10-09. Статусы остаются REMIND, DONE, NO_DATE; языки ru, kz, en меняют только интерфейс. Сравните три строки tasks.json с прочитанными из БД. Запустите тесты. Попытка снова выполнить init должна остановиться без замены существующей базы.
Предскажите и проверьте
Сначала запишите ожидаемый вывод точно, включая порядок строк. Затем выполните код из папки step-05 и сравните посимвольно. Измените один вход и повторите цикл «предсказать — запустить — объяснить». Пример доказывает только заявленное правило: он не превращает учебные вымышленные данные в измерение реальных людей.
from pathlib import Path
from tempfile import TemporaryDirectory
from datetime import date
from data_store import create_database, load_document_from_db
from assistant_core import reminder_status
with TemporaryDirectory() as folder:
db = Path(folder) / "test.db"
create_database(db, "tasks.json", "study_sessions.csv")
for task in load_document_from_db(db)["tasks"]:
print(task["id"], reminder_status(task, date(2026, 10, 9)))
Ожидаемый вывод
t-01 REMIND
t-02 DONE
t-03 NO_DATE
Поймайте ошибку
Нельзя хранить реальные данные учеников в этом учебном файле или выставлять http.server в интернет. SQLite не создаёт авторизацию, резервные копии, права доступа и защиту от чужих запросов автоматически. Отсутствие изменения БД при GET не доказывает безопасность всей будущей системы.
Изменение проекта
Сохраните step-05: неизменное ядро 1.0, вымышленные JSON и CSV, SQLite-схему, читающую веб-версию и тесты. Файл assistant.db создаётся у ученика локально и не попадает в Git. Следующий блок отдельно разберёт угрозы и восстановление.
Задание и доказательство
Покажите три статуса и отчёт 45/0/25. Объясните ноль у t-02, отказ от неверной даты и повторного импорта. Для зачёта ответьте на 8 из 10 вопросов и дайте товарищу открыть страницу по инструкции без вашей помощи.
Десять вопросов для самопроверки
- Чем наблюдение отличается от вывода по памяти?
- Как отличить пустую длительность от нуля минут?
- Почему сумма четырёх записей равна 70, а не 60?
- Зачем хранить исходный CSV перед очисткой?
- Какой ключ запрещает повтор сессии, а какой — ссылку на несуществующую задачу?
- Почему SQLite требует включить проверку внешних ключей для каждого соединения?
- Чем COUNT(*) по пустому выбору отличается от SUM(minutes)?
- Почему LEFT JOIN сохраняет t-02, а INNER JOIN теряет?
- Какие три проверки делают диаграмму честной?
- Что сохранилось после миграции 1.2 и почему локальный сервер нельзя открыть всем?
Перенос в новую ситуацию
Школа хочет, чтобы многие семьи пользовались этим помощником из разных домов. Какие изменения нужны прежде, чем переносить локальный SQLite и учебный HTTP-сервер на общий сервер? Назовите хотя бы доступ, защиту данных и резервное восстановление.
Возврат через 1, 7 и 30 дней
Через 1 день восстановите схему по памяти и назовите случай, где простая аналогия не работает. Через 7 дней объясните новую таблицу товарищу без текста и ответьте минимум на 7 из 10 вопросов итогового урока. Через 30 дней повторите импорт во временную папку и проверьте три задачи, четыре занятия, сумму 70 и неизменные напоминания. Запишите оставшийся непонятным термин и вернитесь к его первому определению.
Первоисточник для проверки
Все уроки курса
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.