Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+661новая вакансия за сутки·58 731вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 712
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 393 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python11 079
  • Облачные технологии8 824
  • QA вакансии2 977
  • Android1 395
  • Инженер данных1 032
  • Продакт-менеджер351

Разработка

  • Backend вакансии1 342
  • iOS1 307
  • AI вакансии660
  • Fullstack вакансии524
  • Frontend вакансии465
  • Mobile вакансии28

По стеку

  • Go6 622
  • Java3 670
  • Kotlin1 199
  • Node.js1 190
  • Rust1 181
  • .NET780
  • PHP329
  • C++301
  • C#211

DevOps и инфраструктура

  • Kubernetes5 251
  • Linux-инфраструктура4 138
  • DevOps вакансии3 024
  • Terraform / IaC2 834
  • Мониторинг и Observability1 406
  • CI/CD917
  • SRE389
  • Кибербезопасность40

Аналитика и данные

  • Аналитик данных586
  • Бизнес-аналитик487
  • Data Scientist458
  • Системный аналитик75

Другие направления

  • Проджект-менеджер114
  • UI/UX дизайн74
  • Ручное тестирование14

По регионам

  • Вакансии в США31 201
  • Вакансии в Европе11 507
  • Работа в России3 630
  • Вакансии в Канаде2 546

По формату

  • Удалённые вакансии47 761
  • Релокация в США31 201
  • Гибридная работа7 699
  • Офисная работа6 071

По уровню

  • Senior вакансии27 027
  • Middle вакансии12 284
  • Junior вакансии4 495

Сейчас нанимают

Все компании
  • Wise196 вакансий
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify38 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме DjangoВсе вопросы
DjangoJuniorТеория

Как работают миграции Django и что происходит при выполнении makemigrations vs migrate?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

makemigrations читает модели и создаёт файлы миграций в коде, не трогая базу; migrate применяет эти файлы к базе, выполняя SQL и фиксируя результат в таблице django_migrations.

makemigrations: генерация файлов миграций

python manage.py makemigrations — читает текущее состояние моделей из кода, сравнивает с последней применённой миграцией (внутреннее состояние хранится в самих файлах миграций), и генерирует новый файл-миграцию в директории migrations/. База данных в этот момент не меняется.

# Создать миграции для всех приложений
python manage.py makemigrations

# Только для конкретного приложения
python manage.py makemigrations myapp

# Дать осмысленное имя
python manage.py makemigrations myapp --name add_user_avatar

# Посмотреть SQL без применения
python manage.py sqlmigrate myapp 0003_add_user_avatar

Миграции Django: как это работает

Миграции — механизм версионирования схемы базы данных. Django отслеживает изменения моделей и превращает их в SQL-инструкции, которые применяются к базе. Два главных шага — makemigrations и migrate — часто путают, но они делают принципиально разные вещи.

Что внутри файла миграции

# myapp/migrations/0003_add_user_avatar.py
from django.db import migrations, models

class Migration(migrations.Migration):
    dependencies = [
        ("myapp", "0002_alter_user_email"),
    ]

    operations = [
        migrations.AddField(
            model_name="user",
            name="avatar",
            field=models.ImageField(null=True, blank=True, upload_to="avatars/"),
        ),
    ]

Файл декларативен: dependencies выстраивают граф порядка применения, operations — список изменений схемы.

migrate: применение миграций к базе

python manage.py migrate — читает все непримененные файлы миграций и выполняет их SQL в базе. Таблица django_migrations хранит историю применённых миграций.

# Применить все непримененные миграции
python manage.py migrate

# Применить миграции конкретного приложения
python manage.py migrate myapp

# Откатиться к конкретной миграции
python manage.py migrate myapp 0002

# Показать статус всех миграций
python manage.py showmigrations

# Показать статус конкретного приложения
python manage.py showmigrations myapp

Полный цикл: от модели до базы

# 1. Изменяем модель в models.py
class UserProfile(models.Model):
    user = models.OneToOneField("auth.User", on_delete=models.CASCADE)
    bio = models.TextField(blank=True)   # новое поле
    avatar = models.ImageField(null=True, upload_to="avatars/")  # ещё одно
# 2. Генерируем файл миграции
python manage.py makemigrations myapp --name add_bio_and_avatar
# Migrations for 'myapp':
#   myapp/migrations/0003_add_bio_and_avatar.py
#     - Add field avatar to userprofile
#     - Add field bio to userprofile

# 3. Проверяем SQL
python manage.py sqlmigrate myapp 0003_add_bio_and_avatar

# 4. Применяем
python manage.py migrate
# Applying myapp.0003_add_bio_and_avatar... OK

django_migrations: таблица учёта

Django хранит применённые миграции в таблице django_migrations (app, name, applied). При запуске migrate он сравнивает файлы в migrations/ с записями в этой таблице и применяет только отсутствующие.

Особые команды

  • --check: завершается с кодом 1 если есть несозданные миграции — удобно в CI.
  • squashmigrations: сжимает много миграций в одну для оптимизации.
  • --fake: помечает миграцию как применённую без реального выполнения SQL (нужно при ручных изменениях схемы).
  • --fake-initial: для уже существующих таблиц при начальной интеграции.

Подводные камни

  • Файлы миграций нужно коммитить в git — они часть кодовой базы. Не добавляйте */migrations/ в .gitignore.
  • Конфликты миграций при работе нескольких разработчиков: два разработчика одновременно создали 0003_*.py. Решение: python manage.py makemigrations --merge.
  • Нельзя переименовывать файлы миграций вручную — Django ищет их по имени в django_migrations.
  • Удаление поля из модели без миграции приводит к ошибкам на уровне ORM, но таблица в БД остаётся нетронутой до migrate.
  • makemigrations без migrate ничего не меняет в схеме — распространённая ошибка новичков.
  • Откат миграций (migrate myapp 0002) поддерживается только если операция обратима; RunPython без reverse_code — необратима.
  • В production применять миграции нужно до деплоя нового кода, чтобы избежать рассинхронизации схемы и ORM.

Типичные ошибки

  • Описывать migrations makemigrations vs migrate только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом Django и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет migrations makemigrations vs migrate через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Django →

Источники

  • https://docs.djangoproject.com/en/5.2/topics/migrations/
←Предыдущий вопросКак работает ORM Django и какие у него преимущества перед сырым SQL?Следующий вопрос→В каких backend-проектах Django является сильным выбором, а где лучше выбрать более простой или другой стек?

Связанные темы

Djangoapi-designtechnical-reasoning

Частые вопросы на собеседовании

  • Как Django защищает от SQL-инъекций, CSRF и XSS-атак?
  • Как организовать настройки, secrets и environment-specific config без утечек?
  • Объясните жизненный цикл запроса/ответа в Django — от разрешения URL до HTTP-ответа.
  • Что такое проблема N+1 запросов в Django и как её обнаружить и исправить?