Полный сброс Django DB - PullRequest
       1

Полный сброс Django DB

17 голосов
/ 18 февраля 2010

Как мне полностью сбросить базу данных Django (1.2 alpha) (отбрасывать все таблицы, а не просто очищать их)?

manage.py flush делает слишком мало (не будет работать, если есть изменения схемы), а manage.py reset требует, чтобы я указал все приложения (и, похоже, принимает формат, отличный от простого "" .join (INSTALLED_APPS)) , Очевидно, я могу достичь этого специфическим для БД способом, но я решил, что для этого должен быть вменяемый, независимый от БД внутренний путь.

[Редактировать: я ищу что-то, что я могу вызвать из сценария, например Makefile, который продолжает работать, если я изменяю внутреннюю базу данных или добавляю к settings.INSTALLED_APPS]

Ответы [ 6 ]

17 голосов
/ 18 февраля 2010

Этот фрагмент дает код для manage.py reset_db команды, которую вы можете установить, это минимальное изменение, которое решает вашу проблему


Тем не менее, из комментариев ниже:

Вы можете просто установить расширения команд Django, чтобы получить reset_db и другие вкусности: https://github.com/django-extensions/django-extensions

1 голос
/ 18 февраля 2010

Вы хотите sqlreset:

% python manage.py help sqlreset
Usage: manage.py sqlreset [options] <appname appname ...>

Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s).

Options:
  -v VERBOSITY, --verbosity=VERBOSITY
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=all output
  --settings=SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath=PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Print traceback on exception
  --version             show program's version number and exit
  -h, --help            show this help message and exit

Как и при изменении модели, Django не будет делать это автоматически за вас.Он будет выводить только команды для вас, чтобы скопировать и вставить.

0 голосов
/ 11 сентября 2012

Если вы (к счастью) находитесь в среде Linux, а также:

  • используя MySQL и знаю имя пользователя / пароль для доступа к базе данных проекта
  • bash, mysql, readlink установлены
  • settings.py - это settings.py
  • dbname совпадает с именем вашего проекта django (см. MYAPP var ниже)
  • все приложения, которые вы хотите сбросить, перечислены в INSTALLED_APPS как строки с полностью определенными именами модулей (начиная с имени вашего проекта django)

Измените вашу текущую папку на код вашего проекта, где находятся manage.py и settings.py. Затем выполните следующее:

MYAPP=$(basename $(dirname `readlink -m settings.py`));DJANGOAPPS=$(echo 'import settings; print " ".join([ str(app).lstrip("'${MYAPP}'.") for app in settings.INSTALLED_APPS if "'${MYAPP}'" in app ])' | python - ); python manage.py sqlreset $DJANGOAPPS | mysql -u root --password ${MYAPP}

Если вы понимаете, что происходит в этом bash oneliner - это не должно быть проблемой, чтобы развить эту идею (например, поместить ее в Makefile).

0 голосов
/ 18 февраля 2010

Хм, может быть, вы врете за manage.py, притворяясь, что делаете приборы, но только для поиска приложений:

apps = $ (python manage.py makefixture 2> & 1 | egrep -v '(^ Error | ^ django)' | awk -F. '{Print $ 2}' | uniq); для меня в $ приложения; do python manage.py sqlreset $ i; сделано | grep DROP

Это распечатывает список операторов DROP TABLE для всех таблиц приложений вашего проекта, за исключением самих таблиц django. Если вы хотите включить их, удалите шаблон |^django vom egrep.

Но как правильно указать базу данных? sed / awk-ing через settings.conf? Или лучше, используя небольшой скрипт python для settings.conf-reading.

0 голосов
/ 18 февраля 2010

взгляните на команду сброса в коде django и напишите свою собственную, которая сначала удаляет / создает БД.

0 голосов
/ 18 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...