Как упростить миграцию в Django 1.7?

Уже есть похожие вопросы для Юга, но я начал свой проект с Django 1.7 и не использовал Юг.

Во время разработки было создано множество миграций, однако программное обеспечение еще не выполнено и не существует базы данных, которую необходимо перенести. Поэтому я хотел бы сбросить миграцию, как если бы моя текущая модель была оригинальной и воссоздала все базы данных.

Каков рекомендуемый способ сделать это?

EDIT: с Django 1.8 появилась новая команда с именем squashmigrations, которая более или менее решает описанную здесь проблему.

    В версии миграции Django 1.7 функции сброса, которые раньше были на Юге, были отброшены в пользу новой функциональности для «раздавливания» ваших миграций. Это должно быть хорошим способом контролировать количество проверок.

    https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations

    Если вы все еще хотите начать с нуля, я предполагаю, что вы все еще можете, опустошив таблицу миграции и удалив миграцию, после чего вы снова запустите makemigrations .

    Я получил это. Я просто понял это, и это хорошо.

    • Во-первых, чтобы очистить таблицу миграции:

       ./manage.py migrate --fake  zero 
    • Удалите app-name/migrations/ папку или содержимое.

    • Сделайте миграцию:

       ./manage.py makemigrations  
    • Наконец, уберите ваши миграции без внесения других изменений в базу данных:

       ./manage.py migrate --fake  

    У меня была такая же проблема. Вот мой способ обхода.

     #!/bin/sh echo "Starting ..." echo ">> Deleting old migrations" find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -delete # Optional echo ">> Deleting database" find . -name "db.sqlite3" -delete echo ">> Running manage.py makemigrations" python manage.py makemigrations echo ">> Running manage.py migrate" python manage.py migrate echo ">> Done" 

    Команда find : http://unixhelp.ed.ac.uk/CGI/man-cgi?find

    Предполагая, что это ваша структура проекта,

     project_root/ app1/ migrations/ app2/ migrations/ ... manage.py remove_migrations.py 

    вы можете запустить скрипт remove_migrations.py из указанного выше места, чтобы удалить все файлы миграции.

     #remove_migrations.py """ Run this file from a Django =1.7 project root. Removes all migration files from all apps in a project. """ from unipath import Path this_file = Path(__file__).absolute() current_dir = this_file.parent dir_list = current_dir.listdir() for paths in dir_list: migration_folder = paths.child('migrations') if migration_folder.exists(): list_files = migration_folder.listdir() for files in list_files: split = files.components() if split[-1] != Path('__init__.py'): files.remove() 

    Удаление вручную может быть утомительным, если у вас есть сложный проект. Это сэкономило мне много времени. Удаление файлов миграции безопасно. Я делал это несколько раз, не сталкиваясь с какими-либо проблемами … пока.

    Однако, когда я удалил папку миграций, makemigrations или migrate не создали папку для меня. Сценарий гарантирует, что папка переноса с ее __init__.py останется, только удаляя файлы миграции.

    1. Удалить файлы: delete_migrations.py (в корневом каталоге prj):
     import os for root, dirs, files in os.walk(".", topdown=False): for name in files: if '/migrations' in root and name != '__init__.py': os.remove(os.path.join(root, name)) 
    1. DELETE FROM django_migrations Where app in ('app1', 'app2');

    2. ./manage.py makemigrations

    3. ./manage.py migrate –fake

    ИЛИ, вы можете написать миграцию из этого всего

    Я пробую разные команды, и некоторые ответы помогают мне. Только эта последовательность в моем случае фиксировала как поврежденные зависимости при миграции в MYAPP, так и чистую все прошлые миграции, начиная с нуля.

    Перед этим убедитесь, что firebase database уже синхронизирована (например, не добавляйте сюда новое поле модели или не меняйте параметры Meta).

     rm -Rf MYAPP/migrations/* python manage.py makemigrations --empty MYAPP python manage.py makemigrations python manage.py migrate --fake MYAPP 0002 

    Где 0002 – номер миграции, возвращаемый последней командой makemigrations.

    Теперь вы можете снова запустить makemigrations / migrate снова, потому что миграция 0002 сохраняется, но не отражается в уже синхронизированной базе данных.

    Если вы не заботитесь о предыдущих миграциях, как просто удалить все миграции в каталоге migrations /? вы начнете миграционную последовательность с нуля, взяв текущую модель в качестве ссылки, как если бы вы написали всю модель сейчас.

    Если вы не доверяете мне достаточно, чтобы удалить, попробуйте отложить их.

    Простым способом является

    Перейдите в каждое приложение и удалите файлы миграции.

    Затем перейдите в таблицу django-migrtaions в базе данных и обрезайте ее (удалите все записи).

    После этого вы можете снова создать миграцию.

    cd в каталог src cd /path/to/src

    удалить каталоги миграции rm -rf your_app/migrations/

    обратите внимание, что это нужно делать для каждого приложения отдельно

    migrate python3.3 manage.py migrate

    если вы хотите снова запустить python3.3 manage.py makemigrations your_app

    Если вы находитесь в режиме разработки, и вы просто хотите сбросить все (firebase database, миграция и т. Д.), Я использую этот сценарий на основе ответа Абдельхамида Ба. Это приведет к уничтожению таблиц базы данных (Postgres), удалению всех файлов миграции, повторному запуску миграции и загрузке моих первоначальных настроек:

     #!/usr/bin/env bash echo "This will wipe out the database, delete migration files, make and apply migrations and load the intial fixtures." while true; do read -p "Do you wish to continue?" yn case $yn in [Yy]* ) make install; break;; [Nn]* ) exit;; * ) echo "Please answer yes or no.";; esac done echo ">> Deleting old migrations" find ../../src -path "*/migrations/*.py" -not -name "__init__.py" -delete # Optional echo ">> Deleting database" psql -U db_user -d db_name -a -f ./reset-db.sql echo ">> Running manage.py makemigrations and migrate" ./migrations.sh echo ">> Loading initial fixtures" ./load_initial_fixtures.sh echo ">> Done" 

    Файл reset-db.sql:

     DO $$ DECLARE r RECORD; BEGIN -- if the schema you operate on is not "current", you will want to -- replace current_schema() in query with 'schematodeletetablesfrom' -- *and* update the generate 'DROP...' accordingly. FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE'; END LOOP; END $$; 

    Файл migration.sh:

     #!/usr/bin/env bash cd ../../src ./manage.py makemigrations ./manage.py migrate 

    Файл load_initial_fixtures.sh:

     #!/usr/bin/env bash cd ../../src ./manage.py loaddata ~/path-to-fixture/fixture.json 

    Просто не забудьте изменить пути, соответствующие вашему приложению. Я лично имею эти скрипты в папке project_root / script / local, а источники django находятся в project_root / src.

    После удаления каждой папки «миграции» в моем приложении (вручную) я запускал:

     ./manage.py dbshell delete from django_migrations; 

    Тогда я подумал, что могу просто сделать ./manage.py makemigrations чтобы восстановить их все. Однако никаких изменений не обнаружено. Затем я попытался указать одно приложение за раз: ./manage.py makemigrations foo , ./manage.py makemigrations bar . Однако это привело к циклическим зависимостям, которые невозможно было решить.

    Наконец, я запустил одну команду makemigrations, которая указала ВСЕ мои приложения (в определенном порядке):

     ./manage.py makemigrations foo bar bike orange banana etc 

    На этот раз он работал – циклические зависимости были автоматически разрешены (при необходимости они создавали дополнительные файлы миграции).

    Затем я смог запустить ./manage.py migrate --fake и вернулся в бизнес.

    Interesting Posts

    Как я могу опробовать файлы, сокеты или дескрипторы для чтения / записи в Haskell?

    Создание проекта Maven в Eclipse жалуется «Не удалось разрешить архетип»

    Как автоматически перейти к нижней части многострочного текстового поля?

    Сортировка массива с минимальным количеством сравнений

    Почему я должен добавлять свои пользовательские атрибуты с помощью «data-»?

    Отображение причудливых уравнений с Java

    Являются ли динамические запросы mysql с sql-экранированием столь же безопасными, как и подготовленные операторы?

    android изменить цвет текста элементов в прядильщике

    Переход к следующему элементу управления нажатием клавиши Enter в WPF

    Неразумно ли назначать базу данных MySQL каждому пользователю на моем сайте?

    Является ли регистр C # нечувствительным к оператору?

    Каков ваш метод маркировки «folksonomy» для файлов на вашей локальной машине?

    Как выполнить тройную загрузку

    Использование HttpContext.Current в WebApi опасно из-за async

    Вращение андроида видео

    Давайте будем гением компьютера.