{
  "id": 1109,
  "title": "Создание надежной архитектуры базы данных на Flask и SQLAlchemy",
  "speaker": "Corey Schafer",
  "topic": "Развертывание ORM SQLAlchemy для управления данными в веб-приложении на Flask. Практикум для Python-разработчиков среднего уровня за 30 минут.",
  "duration_label": "29:58",
  "theses": [
    {
      "title": "Установите Flask-SQLAlchemy",
      "description": "Используйте пакет `flask-sqlalchemy` вместо стандартного `sqlalchemy`. Это расширение предоставляет удобные настройки по умолчанию, специфичные для Flask, упрощая интеграцию базы данных в ваш проект."
    },
    {
      "title": "Сконфигурируйте URI базы данных",
      "description": "Укажите путь к SQLite базе данных в конфигурации приложения. Использование относительного пути с тремя слэшами создает файл базы данных непосредственно в директории проекта, что идеально для этапа разработки."
    },
    {
      "title": "Создайте структуру данных через модели",
      "description": "Определите таблицы базы данных как Python-классы, наследуемые от `db.Model`. Каждое поле в классе превращается в колонку таблицы, что позволяет взаимодействовать с SQL через интуитивный объектно-ориентированный интерфейс."
    },
    {
      "title": "Реализуйте отношения «один-ко-многим»",
      "description": "Свяжите таблицы `User` и `Post` с помощью `db.relationship` и внешнего ключа. Это позволяет легко получать доступ ко всем постам пользователя через атрибут объекта, не прибегая к сложным SQL-запросам вручную."
    },
    {
      "title": "Используйте UTC для временных меток",
      "description": "Всегда применяйте `datetime.utcnow` (без вызова функции) в качестве значения по умолчанию для временных колонок. Это обеспечивает согласованность данных независимо от часового пояса сервера."
    },
    {
      "title": "Создайте таблицы командой `create_all`",
      "description": "Инициируйте создание физических таблиц в базе данных с помощью метода `db.create_all()` в интерактивной оболочке Python. Это переносит вашу объектную схему в реальный файл базы данных."
    },
    {
      "title": "Выполняйте операции CRUD через сессии",
      "description": "Добавляйте записи в базу данных с помощью `db.session.add()` и фиксируйте изменения командой `db.session.commit()`. Такой подход гарантирует атомарность и целостность транзакций."
    },
    {
      "title": "Оптимизируйте выборку данных методами запросов",
      "description": "Используйте методы `.query.all()`, `.query.first()` или `.filter_by()` для извлечения данных. Это превращает записи базы данных обратно в Python-объекты, готовые к дальнейшему использованию в коде."
    }
  ],
  "exercises": [
    {
      "title": "Настройка окружения и модели базы данных",
      "description": "⏱ 20 мин | 🎯 Цель: Подключить SQLAlchemy и создать схему данных. | Шаги: 1. Установите flask-sqlalchemy через pip. 2. Добавьте конфигурацию `SQLALCHEMY_DATABASE_URI` в файл проекта. 3. Опишите классы User и Post с нужными типами данных. | ✅ Результат: Файл `flask_blog.py` с настроенными моделями."
    },
    {
      "title": "Создание и наполнение базы данных",
      "description": "⏱ 15 мин | 🎯 Цель: Инициализировать БД и внести тестовые данные. | Шаги: 1. Запустите консоль Python. 2. Импортируйте экземпляр `db`. 3. Выполните `db.create_all()`. 4. Создайте двух пользователей и три поста, сохранив их через `commit`. | ✅ Результат: Файл `site.db` в директории проекта."
    },
    {
      "title": "Тестирование связей и фильтрации",
      "description": "⏱ 10 мин | 🎯 Цель: Освоить синтаксис запросов. | Шаги: 1. Сделайте запрос `User.query.filter_by(...)`. 2. Получите посты конкретного пользователя через атрибут `user.posts`. 3. Проверьте работу обратной ссылки `post.author`. | ✅ Результат: Консольные логи с выведенными данными пользователей и их постов."
    }
  ],
  "quotes": [
    {
      "text": "ORM позволяет нам взаимодействовать с базой данных в объектно-ориентированном стиле. Самое удобное, что можно сменить тип базы данных, не меняя основной код приложения.",
      "context": "Объяснение преимущества использования SQLAlchemy в проектах."
    },
    {
      "text": "Мы используем три слэша для указания относительного пути в SQLite. Это означает, что файл базы данных будет создан прямо в директории вашего проекта рядом с Python-модулем.",
      "context": "Техническая деталь конфигурации путей для SQLite."
    },
    {
      "text": "Relationship — это не колонка в таблице. Это способ выполнения дополнительного SQL-запроса в фоне, чтобы удобно связать объекты в коде.",
      "context": "Разъяснение того, как работает связь между таблицами."
    },
    {
      "text": "Используйте UTC при сохранении даты и времени. Это критически важно для согласованности данных в распределенных системах.",
      "context": "Рекомендация по работе с временными метками."
    }
  ],
  "full_markdown": "# Создание надежной архитектуры базы данных на Flask и SQLAlchemy\n\n⚡ **Зачем читать этот экстракт:**\n⚡ Изучите ORM для управления данными; ⚡ Узнайте, как связывать таблицы (один-ко-многим); ⚡ Освойте работу с SQLite через Python.\n\n> 🎤 **Corey Schafer** — Corey Schafer — известный создатель обучающих видео по Python, специализирующийся на глубоком разборе библиотек Flask и Django для разработчиков всех уровней.\n\n## 🗺 Карта навыков\n\n| # | Навык | Время | Результат |\n|---|-------|-------|-----------|\n| 1 | Интеграция Flask-SQLAlchemy | 5 мин | Настроенное соединение с базой данных |\n| 2 | Проектирование моделей данных | 15 мин | Архитектура таблиц приложения |\n| 3 | Написание запросов к БД | 10 мин | Умение извлекать и фильтровать данные |\n| 4 | Работа с внешними ключами | 10 мин | Связанные данные между пользователями и постами |\n\n\n*Развертывание ORM SQLAlchemy для управления данными в веб-приложении на Flask. Практикум для Python-разработчиков среднего уровня за 30 минут.*\n\n\n## Ключевые тезисы\n\n### Установите Flask-SQLAlchemy\nИспользуйте пакет `flask-sqlalchemy` вместо стандартного `sqlalchemy`. Это расширение предоставляет удобные настройки по умолчанию, специфичные для Flask, упрощая интеграцию базы данных в ваш проект.\n\n### Сконфигурируйте URI базы данных\nУкажите путь к SQLite базе данных в конфигурации приложения. Использование относительного пути с тремя слэшами создает файл базы данных непосредственно в директории проекта, что идеально для этапа разработки.\n\n### Создайте структуру данных через модели\nОпределите таблицы базы данных как Python-классы, наследуемые от `db.Model`. Каждое поле в классе превращается в колонку таблицы, что позволяет взаимодействовать с SQL через интуитивный объектно-ориентированный интерфейс.\n\n### Реализуйте отношения «один-ко-многим»\nСвяжите таблицы `User` и `Post` с помощью `db.relationship` и внешнего ключа. Это позволяет легко получать доступ ко всем постам пользователя через атрибут объекта, не прибегая к сложным SQL-запросам вручную.\n\n### Используйте UTC для временных меток\nВсегда применяйте `datetime.utcnow` (без вызова функции) в качестве значения по умолчанию для временных колонок. Это обеспечивает согласованность данных независимо от часового пояса сервера.\n\n### Создайте таблицы командой `create_all`\nИнициируйте создание физических таблиц в базе данных с помощью метода `db.create_all()` в интерактивной оболочке Python. Это переносит вашу объектную схему в реальный файл базы данных.\n\n### Выполняйте операции CRUD через сессии\nДобавляйте записи в базу данных с помощью `db.session.add()` и фиксируйте изменения командой `db.session.commit()`. Такой подход гарантирует атомарность и целостность транзакций.\n\n### Оптимизируйте выборку данных методами запросов\nИспользуйте методы `.query.all()`, `.query.first()` или `.filter_by()` для извлечения данных. Это превращает записи базы данных обратно в Python-объекты, готовые к дальнейшему использованию в коде.\n\n\n## Практические задания\n\n### Настройка окружения и модели базы данных\n⏱ 20 мин | 🎯 Цель: Подключить SQLAlchemy и создать схему данных. | Шаги: 1. Установите flask-sqlalchemy через pip. 2. Добавьте конфигурацию `SQLALCHEMY_DATABASE_URI` в файл проекта. 3. Опишите классы User и Post с нужными типами данных. | ✅ Результат: Файл `flask_blog.py` с настроенными моделями.\n\n### Создание и наполнение базы данных\n⏱ 15 мин | 🎯 Цель: Инициализировать БД и внести тестовые данные. | Шаги: 1. Запустите консоль Python. 2. Импортируйте экземпляр `db`. 3. Выполните `db.create_all()`. 4. Создайте двух пользователей и три поста, сохранив их через `commit`. | ✅ Результат: Файл `site.db` в директории проекта.\n\n### Тестирование связей и фильтрации\n⏱ 10 мин | 🎯 Цель: Освоить синтаксис запросов. | Шаги: 1. Сделайте запрос `User.query.filter_by(...)`. 2. Получите посты конкретного пользователя через атрибут `user.posts`. 3. Проверьте работу обратной ссылки `post.author`. | ✅ Результат: Консольные логи с выведенными данными пользователей и их постов.\n\n\n## Цитаты\n\n> ORM позволяет нам взаимодействовать с базой данных в объектно-ориентированном стиле. Самое удобное, что можно сменить тип базы данных, не меняя основной код приложения.\n\n> Мы используем три слэша для указания относительного пути в SQLite. Это означает, что файл базы данных будет создан прямо в директории вашего проекта рядом с Python-модулем.\n\n> Relationship — это не колонка в таблице. Это способ выполнения дополнительного SQL-запроса в фоне, чтобы удобно связать объекты в коде.\n\n> Используйте UTC при сохранении даты и времени. Это критически важно для согласованности данных в распределенных системах.\n",
  "youtube_url": "https://www.youtube.com/watch?v=cYWiDiIUxQc",
  "url": "https://ekstraktznaniy.ru/workbook/1109"
}