Shanraq.org Shanraq.org
Выпуск 1.2: помощник с SQLite
Общество

Информатика: создаём своего цифрового помощника Урок 54 из 72

Выпуск 1.2: помощник с SQLite

Выпустим помощника 1.2: данные в SQLite, прежние напоминания и тот же локальный веб-экран.

Где мы на карте

Урок 54 из 72, блок «Данные, таблицы и базы» (47–54). Мы продолжаем помощника 1.1 с тремя вымышленными задачами. В конце блока его записи будут храниться в локальном SQLite, а проверенные правила напоминаний останутся прежними.

Выпуск 1.2: помощник с 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 вопросов и дайте товарищу открыть страницу по инструкции без вашей помощи.

Десять вопросов для самопроверки

  1. Чем наблюдение отличается от вывода по памяти?
  2. Как отличить пустую длительность от нуля минут?
  3. Почему сумма четырёх записей равна 70, а не 60?
  4. Зачем хранить исходный CSV перед очисткой?
  5. Какой ключ запрещает повтор сессии, а какой — ссылку на несуществующую задачу?
  6. Почему SQLite требует включить проверку внешних ключей для каждого соединения?
  7. Чем COUNT(*) по пустому выбору отличается от SUM(minutes)?
  8. Почему LEFT JOIN сохраняет t-02, а INNER JOIN теряет?
  9. Какие три проверки делают диаграмму честной?
  10. Что сохранилось после миграции 1.2 и почему локальный сервер нельзя открыть всем?

Перенос в новую ситуацию

Школа хочет, чтобы многие семьи пользовались этим помощником из разных домов. Какие изменения нужны прежде, чем переносить локальный SQLite и учебный HTTP-сервер на общий сервер? Назовите хотя бы доступ, защиту данных и резервное восстановление.

Возврат через 1, 7 и 30 дней

Через 1 день восстановите схему по памяти и назовите случай, где простая аналогия не работает. Через 7 дней объясните новую таблицу товарищу без текста и ответьте минимум на 7 из 10 вопросов итогового урока. Через 30 дней повторите импорт во временную папку и проверьте три задачи, четыре занятия, сумму 70 и неизменные напоминания. Запишите оставшийся непонятным термин и вернитесь к его первому определению.

Первоисточник для проверки

Официальная документация

Все уроки курса

Все уроки

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить доказательство проекта

Запишите наблюдение, объяснение, исправление ошибки и изменение своего проекта. Модель укажет первую перепутанную или недоказанную связь, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.