Как инициализировать базу данных django при использовании django и south - PullRequest
2 голосов
/ 05 июня 2011

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

#! /bin/env python
import sys, os 

def execute⌘:
    print(cmd)
    ret = os.system(cmd)
    if not ret:
        sys.exit("Last command failed")

if __name__ == "__main__":
    if os.path.isfile('app.sqlite'):
        os.unlink('app.sqlite')

    execute('python manage.py syncdb --noinput --all') # << this fails
    execute('python manage.py migrate --noinput --all')

Моя проблема в том, что я не смог найти способ безопасной повторной инициализации базы данных. Запуск migrate завершается неудачно, потому что требуется syncdb, а syncdb завершается неудачей, потому что требуется migrate.

Не просите меня игнорировать коды возврата из команд, я хочу решение, способное правильно обрабатывать коды ошибок.

1 Ответ

2 голосов
/ 05 июня 2011

Вы используете sys.exit() неправильно. Вы могли бы raise Exception("error message").

Кроме того, сообщение об ошибке относительно того, что вы видите, будет полезно, чтобы лучше ответить на ваш вопрос.

ли:

./manage.py syncdb --migrate --noinput

решить вашу проблему?

Возможно, вам следует проверить:

if ret != 0:
    raise Exception("error")
...