обновить базу данных django, чтобы отразить изменения в существующих моделях

Я уже определил модель и создал связанную с ней базу данных через manager.py syncdb . Теперь, когда я добавил несколько полей в модель, я снова попробовал syncdb , но выход не появляется. При попытке получить доступ к этим новым полям из моих шаблонов я получаю исключение «No Such Column», что заставляет меня думать, что syncdb фактически не обновляет базу данных. Какая здесь правильная команда?

  • Двоичная классификация в TensorFlow, неожиданные большие значения потери и точности
  • Как выгрузить (перезагрузить) модуль Python?
  • Выравнивание памяти для быстрого БПФ в Python с использованием общих атрибутов
  • Как сделать встроенные графики в Jupyter Notebook больше?
  • gethostbyname_ex (имя хоста) чрезвычайно медленно
  • Разница между numpy dot () и умножением матрицы Python 3.5+ @
  • scrapy, как импортировать настройки, чтобы переопределить его
  • Как повторно использовать графики в matplotlib?
  • 8 Solutions collect form web for “обновить базу данных django, чтобы отразить изменения в существующих моделях”

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


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

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

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

    Django 1.4.15 и ранее

     python manage.py dumpdata <your_app> > temp_data.json python manage.py reset <your_app> python manage.py loaddata temp_data.json 

    Django 1.5 и новее

     python manage.py dumpdata <your_app> > temp_data.json python manage.py sqlclear <your_app> | python manage.py dbshell python manage.py syncdb python manage.py loaddata temp_data.json 

    (Команда reset была устарела, а затем удалена в Django 1.5 )

    Если ваши изменения нарушают вашу прежнюю схему, это не сработает – в этом случае такие инструменты, как South или Django Evolution , великолепны.

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

     python manage.py makemigrations <your app name> python manage.py migrate 

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

    1. Сначала измените класс модели.
    2. Затем запустите: manage.py sql myapp.
    3. Посмотрите на sql, который он распечатает, и посмотрите, как он представляет изменение, которое вы собираетесь сделать.
    4. Внесите изменения вручную с помощью менеджера баз данных.
    5. Убедитесь, что все работает правильно, используя сайт администратора.

    Если вы используете sqllite, хорошим менеджером является плагин firefox: link

    Другим инструментом будет эволюция джанго. В большинстве случаев не требуется сокращение таблицы.

    эволюция джанго

    Просто установите его как любое другое приложение django и запустите:

    python manage.py evolve –hint –execute

    deseb – отличный инструмент для этого.

    После его установки вы можете написать ./manage.py sqlevolve и создать команды sql, необходимые для синхронизации структуры базы данных с вашими моделями.

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

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

    Есть инструменты, которые помогают в этом. Однако во многих случаях это так же легко сделать вручную.

    Для версий 1.4.1 и выше команда изменилась на

     python manage.py flush 

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

    Python - лучший язык программирования в мире.