TGViewer
CodeShadow CodeShadow @codeshadowcources · 77 subscribers
Post #359 57
Объясню:
— User — базовая модель с Telegram ID и дефолтным временем напоминания.
— Task — разовая задача: заголовок, описание, дата/время, статус (pending/done), напоминание.
— ClassSchedule — фиксированное расписание: день недели (0=Пн), время старта, длительность, локация. Активно/неактивно для деактивации без удаления.
— Связи: one-to-many (пользователь имеет много задач/занятий), с каскадным удалением.


В main.py инициализируем БД:

# main.py (фрагмент)
from db import engine, SessionLocal
from models import Base

def init_db():
Base.metadata.create_all(bind=engine)

# ... потом запуск бота


Это создаст таблицы при старте. Для миграций в проде используйте Alembic, но для MVP хватит.

⚙️ Советы:
- Храните даты в UTC, но в коде используйте pytz для локальной зоны (Europe/Moscow по дефолту).
- Индексы на starts_at и start_time ускорят запросы по времени.
- Cascade="all, delete-orphan" — автоматически удаляет задачи при удалении юзера (хотя в боте юзеры не удаляются).


🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩
🧩🧩🧩🧩🧩🧩🧩🧩🧩
В следующем посте разберём utils.py и scheduler.py — хелперы, парсинг дат и как настроить напоминания с APScheduler. Если есть вопросы по БД — пишите в комментах!

🧠 Что думаешь: SQLite хватит для такого бота или сразу на Postgres? Делитесь опытом!

#CodeShadow #TelegramBot #Python #SQLAlchemy #Планировщик
More from @codeshadowcources
  1. Oct 9, 2026🖥
  2. Oct 8, 2026Наш внутренний проект для преподавателей. Думаю, получилось отлично)
  3. Oct 8, 2026🎮 Как мы внедрили геймификацию в работу преподавателей Геймификация давно вышла за предел…
  4. Oct 6, 2026😎
  5. Oct 3, 2026😐
  6. Sep 27, 2026Пусть Codex или Claude сами напишут MCP Теперь кейс посерьёзнее. Допустим, приходит клиент…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →