Size: a a a

Django [ru] #STAY HOME

2018 December 02

MO

Marina Orlova in Django [ru] #STAY HOME
Привет. Можно ли как-то проимортировать базу в проект (.dmp файл), без предварительного полного удаления схемы? Проблема в том, что для всех приложений после апдейта джанги теперь есть только одна миграция  - 0001_initial.py. В импортируемой базе есть не все связи. И когда после импорта я пытаюсь домигрировать (migrate), ожидаемо все валится, потому что в 0001_initial прописаны и уже существующие связи, и еще нет. (Вариант откатить миграции обратно и проапдейтить уже оставлен на крайний случай)
источник

NK

ID:531453784 in Django [ru] #STAY HOME
@BitcoinIsBubble будет жить. Поприветствуем!
источник

SM

Sergey Matveyev in Django [ru] #STAY HOME
Marina Orlova
Привет. Можно ли как-то проимортировать базу в проект (.dmp файл), без предварительного полного удаления схемы? Проблема в том, что для всех приложений после апдейта джанги теперь есть только одна миграция  - 0001_initial.py. В импортируемой базе есть не все связи. И когда после импорта я пытаюсь домигрировать (migrate), ожидаемо все валится, потому что в 0001_initial прописаны и уже существующие связи, и еще нет. (Вариант откатить миграции обратно и проапдейтить уже оставлен на крайний случай)
Мне кажется что это тот случай когда крайниц вариант - единственный
источник
2018 December 03

A

A in Django [ru] #STAY HOME
как в view при сохранении QuerySet использовать commit=False
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
Marina Orlova
Привет. Можно ли как-то проимортировать базу в проект (.dmp файл), без предварительного полного удаления схемы? Проблема в том, что для всех приложений после апдейта джанги теперь есть только одна миграция  - 0001_initial.py. В импортируемой базе есть не все связи. И когда после импорта я пытаюсь домигрировать (migrate), ожидаемо все валится, потому что в 0001_initial прописаны и уже существующие связи, и еще нет. (Вариант откатить миграции обратно и проапдейтить уже оставлен на крайний случай)
Ситуация описана недостаточно понятно, но предпоследняя фраза говорит о том, что всё сломано...
источник

MO

Marina Orlova in Django [ru] #STAY HOME
непонятно, но сломано 😒 это вообще не прод, так что сломано по определению быть не может
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
А, ну если не прод, то просто сделай дамп данных, если они есть, удали базу и миграции, обнови джангу до новой версии, создай миграции заново с нуля, накати на новую базу данных и восстанови содержимое таблиц (кроме таблицы миграций и прочих системных)
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
Если у тебя там дев окружение и контейнеры, то зачастую база данных создаётся и удаляется для каждой фичи
источник

MO

Marina Orlova in Django [ru] #STAY HOME
>> создай миграции заново с нуля - они все создаются в одном файле - 0001_initial.py
источник

MO

Marina Orlova in Django [ru] #STAY HOME
в этом и есть проблема
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
Он создал тампотому что не нашёл других миграций и решил, что это первая)
источник

MO

Marina Orlova in Django [ru] #STAY HOME
почему так сделано это понятно - непонятно, что с этим делать.
источник

MO

Marina Orlova in Django [ru] #STAY HOME
базу нельзя проимпортировать не удалив старую
источник

MO

Marina Orlova in Django [ru] #STAY HOME
после импорта создаются не все связи
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
Marina Orlova
почему так сделано это понятно - непонятно, что с этим делать.
Зависит от задачи же, если это не прод, то обычно можно просто всё удалить и забыть о проблеме
источник

MO

Marina Orlova in Django [ru] #STAY HOME
ты не понимаешь. если я все удалю и создам снова (makemigrations), все поля  опять запишутся в одном файле (0001_initials). и после импорта дампа я не смогу доимпортировать оставшиеся связи
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
Marina Orlova
ты не понимаешь. если я все удалю и создам снова (makemigrations), все поля  опять запишутся в одном файле (0001_initials). и после импорта дампа я не смогу доимпортировать оставшиеся связи
А зачем их доимпортировать? Просто удали базу данных и сделай новую
источник

MO

Marina Orlova in Django [ru] #STAY HOME
в дампе есть НЕ все связи даже в свежайшем
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
Короче я не понял задачу)
источник

AO

Alexander Ovchinnikov 🦁 in Django [ru] #STAY HOME
база данных - это некая структура таблиц + сами данные этих таблиц

дамп структуры таблиц не нужен, структура таблиц создаётся миграциями... если на каком-то этапе так оказалось, что структура таблиц есть, а миграций нет, нужно их создать и применить с указаним —fake или —fake-initial, тогда бы создался файл 001_initial и как бы "применился", а на самом деле бы просто записался со статусом "применён", после чего все изменения (новые) в моделях приводили бы к появлению новых миграция (002_auto_...), которые можно было бы применять уже в нормальном режиме...

ну, а что касается данных - можно как обычно восстанавливаться из дампа данных через стандартные утилиты сервера базы данных, если там другая структура таблиц или что-то такое - то можно скриптом подправить эти sql-команды в файле дампа так, чтобы они подходили под новую структуру таблиц (ну, если вдруг дамп есть для старой версии таблиц)
источник