Как удалить таблицу из SQLite3 в DJango?
Я сделал модель и запустил python manage.py syncdb. Я думаю, что создал таблицу в db. Затем я понял, что неправильно сделал столбец, поэтому я его поменял и выполнил ту же команду, считая, что он потеряет старую таблицу и добавит новую.
Затем я перешел на python manage.py shell и попытался запустить .objects.all(), и он потерпел неудачу, сказав, что столбец не существует.
Я хочу удалить старую таблицу, а затем снова запустить syncdb, но я не могу понять, как это сделать.
Ответы
Ответ 1
Еще один простой способ сделать это при использовании Django 1.4 или ниже -
python manage.py reset app_name
который отбрасывает и воссоздает таблицы, используемые моделями этого приложения.
Это было устарело в Django 1.3 и больше не доступно из Django 1.5
Ответ 2
чтобы очистить приложение, так же просто, как и запись:
./manage.py sqlclear app_name | ./manage.py dbshell
то для того, чтобы перестроить ваши таблицы, просто введите:
./manage.py syncdb
Ответ 3
Ни один из ответов не показывает, как удалить только одну таблицу в приложении. Это не слишком сложно. Команда 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 перестроит таблицу в соответствии с вашей моделью. Таким образом, вы можете обновлять таблицы базы данных, не теряя при этом всех данных приложения. Если вы столкнулись с этой проблемой много, подумайте о том, как использовать юг - приложение django, которое перенесет ваши таблицы для вас.
Ответ 4
получить инструкции DROP с помощью
python manage.py sqlclear app_name
затем попробуйте
python manage.py dbshell
и выполните оператор DROP
проверить http://docs.djangoproject.com/en/dev/ref/django-admin/
Ответ 5
У меня была та же проблема.
Для быстрого решения (если вы не хотите потерять свои таблицы/данные), скорректируйте файл models.py с требуемыми типами данных, удалите папку миграции и файл db.SQLite3,
затем запустите следующие команды:
- python manage.py migrate
- python manage.py makemigrations
- python manage.py migrate
- python manage.py createuperuser (для создания пользователя admin/pswd для управления страницей администратора)
- python manage.py runningerver
Ответ 6
В Django 1.9 мне пришлось делать шаги Кэт Руссо, но вторая миграция была немного сложной. Вы должны запустить
./manage.py migrate --run-syncdb