ПредишенСледващото

Имаше следния проблем: За някои приложения, е необходимо да се премахне полеви тагове = TaggableManager (празно = True) (и по този начин зависимостта Django-taggit). Както обикновено, мия областта и призив makemigration, който си е свършил работата добре. Но когато ти се обадя мигрират към друг проект, с един и същ набор от миграцията възниква грешка, че taggit намерено приложение за миграцията. Разбира се, логично е, че миграцията ще изисква тази молба.

Сега осъзнавам, че просто може да подобри миграция, която беше създадена taggit област, в който тя се отстранява, така че ако не сте го направили, и да ви промени структурата на данните от таблицата, следващите стъпки могат да помогнат.

Прехвърляне на данни от различна структурата на таблицата

Да кажем, че имаме заявка и проекти маса на projects_project с полета:

Искаме следната структура:

По този начин, ние виждаме следните промени:

  1. title_in_link преименуван през намек.
  2. Добави is_boder поле в същото време това е необходимо.
  3. BORDER_WIDTH, който може да бъде празно.
  4. Премахнете полето тагове

И сега "ръчно" правилната структура на маса:

  1. Преименуване на таблицата: projects_project -> projects_project_old.
  2. Изтриване на всички миграция приложение, както и премахване на съответните вписвания в django_migrations на миграция таблицата в базата данни.

И изтриете всички открити редове.

  1. makemigration Покана за формиране 0001_initial.py (като се има предвид, че е необходимо да се възстанови таблицата с помощта на SQL команди).
  2. Обаждането мигрират и да видим какво projects_project на база данни се създава таблица с правилна структура на данните.
  3. Напиши SQL трансфер на данни код от projects_project_old в projects_project:

Помислете за един пример: както можете да видите, че има линия за запълване на полетата. Като пример за качеството на интернет не можах да намеря, следователно, че този пост е роден да запълни това нещо :)

Имайте предвид, че ние не можем да BORDER_WIDTH запълни, защото тя може да бъде празен, но is_border ние трябва да се запълни, но тъй като не разполагаме с информация за тази област, най-простите - е да се попълнят на стойност FALSE за всеки запис. Като опция, а след това можете да напишете Джанго миграция за попълване полета вярно или невярно, в зависимост от наличието на никаква стойност в поле border_color, но това е друга история.

Повече бележка, че поръчката поле на офис съвпада с SQL думата, така че трябва да се изолира тази област двойни кавички.

  1. Премахване на маса projects_project_old.

Сега, това е всичко. За пореден път, този пример за тези, които случайно счупи структурата на данните на една маса, или счупи, или миграция, така както аз изтрит в зависимост от приложението. Това е дълъг "SQL-наръчник" начин да се определи структурата, така че преди да изтриете миграцията, те просто се опитват да се определи :)

Прехвърляне на таблици, свързани с данни

Да предположим, че има маса: галерия и картина. маса картина съдържа външния ключ към галерията със маса.

Този случай е малко по-сложно: когато се опитате да стъпка 4 по-горе Django-вероятно ще се оплакват, нещо като това:

което трябва да се преименува на индекса за решаване на проблема:

Това може да стане чрез pgadmin на GUI:

Sql прехвърляне на данни от една таблица в друга, в блога Артьом Maltsev

Необходимата кодът се подчертава в зелено. Сега щракнете с десния бутон на кликване върху индекса се обадите на контекстното меню и изберете Свойства:

Sql прехвърляне на данни от една таблица в друга, в блога Артьом Maltsev

Тук трябва да се преименува на индекс, например, като се добави "_old".

Сега, отново, ние се опитваме да следваме стъпка 4 и след това следвайте останалите стъпки, описани по-горе.

0 от 5 (0)

Свързани статии

Подкрепете проекта - споделете линка, благодаря!