Как я могу автоматически разрешить syncdb добавить столбец (полная миграция не требуется)

Когда я вношу изменения в свои модели (только чтобы добавить столбец во время разработки!), Django не будет выдавать никаких операторов ALTER TABLE для обновления базы данных. Есть ли способ реализовать или обойти это? - кроме добавления столбцов вручную?


Обратите внимание: я действительно не ищу решения для полной миграции, просто что-то, что позволяет мне продолжать кодировать, когда я добавляю столбцы по пути.


person vdboor    schedule 13.10.2010    source источник
comment
возможный дубликат Какое ваше любимое решение для управления миграции баз данных в django?   -  person Daniel Roseman    schedule 13.10.2010
comment
... среди многих других вопросов по той же теме.   -  person Daniel Roseman    schedule 13.10.2010
comment
Я его немного переделал. Я ищу не полный пакет миграции, а что-то, что можно быстро добавить столбцы во время разработки. Например. syncdb видит, что столбец отсутствует, и добавляет его автоматически.   -  person vdboor    schedule 15.10.2010


Ответы (5)


Воспользуйтесь инструментом миграции, например South.

person Ignacio Vazquez-Abrams    schedule 13.10.2010
comment
@vbdoor: в Django ORM нет модификации собственной схемы. Это нужно делать вручную или с помощью такой утилиты, как South. - person Andrew Sledge; 13.10.2010
comment
Похоже, что миграции в Django 1.7 уже начаты: docs.djangoproject.com/en/ dev / themes / migrations - person Seth; 18.02.2014

Используйте python manage.py sqlclear YOURAPP вместе с dumpdata и loaddata (упрощенная версия ответа от fish2000, которая также использует конкретное приложение):

DB=/path/to/db.sqlite3
APP=YOURAPPNAME
tmpdate=$(date "+%Y%m%d-%H%M%S")

echo "+ Dumping django project database to fixture DUMP-${tmpdate}.json ..." &&\
python manage.py dumpdata $APP --format='json' --indent=4 --verbosity=1 > datadumps/DUMP-${tmpdate}.json &&\
echo '+ Backing up sqlite binary store...' &&\
cp $DB $DB.bk &&\
echo '+ Rebuilding database structure from model defs...' &&\
python manage.py sqlclear $APP &&\
echo "+ Reloading project data from fixture dump DUMP-${tmpdate}.json ..." &&\
python manage.py loaddata datadumps/DUMP-${tmpdate}.json
person Alex Flint    schedule 12.06.2011
comment
Если в модели django есть столбец, а в базе данных нет - я получаю сообщение об ошибке. Это сработало для кого-нибудь еще? - person Mikhail; 04.02.2013
comment
В более новых версиях django (например, 1.5) используется команда python manage.py sqlclear вместо сброса - person tjb; 26.07.2013

Извините, это немного поздно, но я подумал, что в любом случае отправлю его здесь, если у кого-то еще возникнет эта проблема. Если вы все еще в разработке и все ваши данные являются фиктивными данными (что означает, что вы не хотите их хранить), то все, что вам нужно сделать, это удалить базу данных и снова запустить syncdb.

person jerry    schedule 12.12.2011

Ознакомьтесь с эволюцией http://code.google.com/p/django-evolution/

person Ryan    schedule 20.10.2010

Если вы не хотите настраивать миграции - вы можете использовать такой трюк:

export JANGY_PROJECT='/Users/fish/Dropbox/ost2/ost2'
export BPYTHON_INIT_SCRIPT='${JANGY_PROJECT}/utils/django_shell_imports.py'
export PYTHONPATH="${JANGY_PROJECT}:${PYTHONPATH}"

alias jangy="python manage.py"
alias bp="cd $JANGY_PROJECT && bpython --interactive $BPYTHON_INIT_SCRIPT"


function jangyfresh () {
    tmpdate=$(date "+%Y%m%d-%H%M%S") &&\
    cd $JANGY_PROJECT &&\
    echo "+ Dumping django project database to fixture DUMP-${tmpdate}.json ..." &&\
    python manage.py dumpdata --format='json' --indent=4 --verbosity=1 > datadumps/DUMP-${tmpdate}.json &&\
    echo '+ Backing up sqlite binary store and taking database offline...' &&\
    mv sqlite/data.db sqlite/data.db.bk &&\
    echo '+ Rebuilding database structure from model defs...' &&\
    python manage.py syncdb &&\
    echo '+ Graceful-restarting Apache...' &&\
    sudo apachectl graceful &&\
    echo '+ Enabling write access on new sqlite file...' &&\
    chmod a+rw sqlite/data.db &&\
    echo "+ Reloading project data from fixture dump DUMP-${tmpdate}.json ..." &&\
    python manage.py loaddata datadumps/DUMP-${tmpdate}.json &&\
    echo '+ Rebuilding project database structure...'
}

... что делает эта bash функция:

  1. Выгружает базу данных в прибор, названный с отметкой даты / времени
  2. Создает резервную копию и удаляет двоичный файл базы данных (в данном случае SQLite, который сравнительно легко удалить соответствующий файл).
  3. Повторно синхронизирует БД из моделей (регенерирует двоичный файл БД)
  4. (необязательно) Исправляет перма файлов БД (с которыми Dropbox может прикрутить, в моем случае здесь)
  5. Повторно заполняет новую БД из последнего приспособления
  6. (необязательно) перезапускает apache

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

В этих случаях я запускаю команду, редактирую файл models.py, удаляю файл sqlite и перезагружаю последнее приспособление.

Очевидно, я не делаю этого при производственной установке и не рекомендую.

person fish2000    schedule 15.10.2010