Как мне удалить таблицу из SQLite3 в DJango? - PullRequest
49 голосов
/ 18 февраля 2010

Я сделал модель и запустил python manage.py syncdb. Я думаю, что создал таблицу в БД. Затем я понял, что неправильно создал столбец, поэтому изменил его и выполнил ту же команду, думая, что она удалит старую таблицу и добавит новую.

Затем я пошел в оболочку python manage.py и попытался запустить .objects.all (), но это не удалось, сказав, что столбец не существует.

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

Ответы [ 7 ]

69 голосов
/ 16 марта 2013

очистить приложение так же просто, как написать:

./manage.py sqlclear app_name | ./manage.py dbshell 

Затем, чтобы восстановить таблицы, просто наберите:

./manage.py syncdb
38 голосов
/ 18 февраля 2010

Другой простой способ сделать это при использовании Django 1.4 или ниже, будет

python manage.py reset app_name

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

Это не рекомендуется в Django 1.3 и больше не доступно в Django 1.5

36 голосов
/ 11 июня 2013

Ни один из ответов не показывает, как удалить только одну таблицу в приложении.Это не так уж сложно.Команда dbshell регистрирует пользователя в оболочке sqlite3.

python manage.py dbshell

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

SELECT * FROM sqlite_master WHERE type='table';

В общем случае Django именует таблицы в соответствии со следующим соглашением: "appname_modelname".Поэтому SQL-запрос, который выполняет вашу цель, будет выглядеть примерно так:

DROP TABLE appname_modelname;

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

.exit

Если вы снова запустите syncdb, Django перестроит таблицу в соответствии с вашей моделью.Таким образом, вы можете обновить таблицы базы данных без потери всех данных приложения.Если вы часто сталкиваетесь с этой проблемой, рассмотрите возможность использования South - приложения django, которое перенесет ваши таблицы за вас.

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

получить операторы DROP с

python manage.py sqlclear app_name

, затем попробуйте

python manage.py dbshell

и выполнить инструкцию DROP

проверить http://docs.djangoproject.com/en/dev/ref/django-admin/

17 голосов
/ 20 октября 2014

У меня была такая же проблема.

Для быстрого решения (если вы не заботитесь о потере таблиц / данных) исправьте файл models.py с нужными типами данных, удалите папку Migration и файл db.SQLite3,

, затем повторите следующие команды:

  1. python manage.py migrate
  2. python manage.py makemigrations
  3. python manage.py migrate
  4. python manage.py создаёт пользователя (для создания пользователя-администратора / pswd для управления страницей администратора)
  5. python manage.py runserver
1 голос
/ 17 марта 2016

В Django 1.9 мне приходилось делать шаги Кэт Руссо, но вторая миграция была немного хитрой. Вы должны запустить

./manage.py migrate --run-syncdb
0 голосов
/ 01 марта 2019

В Django 2.1.7 я открыл файл db.sqlite3 в браузере SQLite (также есть пакет Python для Pypi ) и удалил таблицу с помощью команды

DROP TABLE appname_tablename;

, а затем

DELETE FROM django_migrations WHERE App='appname';

Затем снова запустите

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