Django sqlite — как изменить схему

#django-models

#django-модели

Вопрос:

Я внес изменения в свой model.py в Django и теперь я хочу синхронизировать эти изменения. Можно удалить таблицы и создать их заново. Однако, похоже, ничего не работает. Я использую sqlite3:

syncdb: работает только в первый раз, без изменений

«python manage.py sql my_site», за которым следует syncdb: я думал, что это «переделает» все это, но в таблице по-прежнему есть только старые столбцы (или я так предполагаю, поскольку я получаю сообщение об ошибке при попытке доступа к таблице с использованием моей модели).

Тогда я полагаю, что могу получить прямой доступ к базе данных и таким образом удалить таблицы. Однако я не знаю, как получить доступ «in» к базе данных, где я могу выполнять команды. Ввод sqlite3 из командной строки не распознается. Я также попробовал «python manage.py sql my_site», но я снова получаю сообщение о том, что sqlite3 не распознан.

Предложения?

Комментарии:

1. Я предполагаю, что вы размещаете в неправильной категории, пожалуйста, укажите, какую ОС вы используете, а также Django не воссоздает / изменяет таблицу при втором запуске syncDB

Ответ №1:

Сначала вы должны установить инструмент командной строки для sqlite. В Ubuntu / Debian вы можете просто сделать

 sudo apt-get install sqlite3
  

В Windows вы можете загрузить его отсюда:http://www.sqlite.org/download.html. Найдите тот, который выглядит как sqlite-shell-win32-xxx.zip .

Используйте это следующим образом:

 > sqlite3 /path/to/your/database
;show some help
.help 
; list all databases
.databases
; clear the contents of a table
DELETE FROM <tablename>;
  

Смотрите также ссылку на командную строку:http://www.sqlite.org/sqlite.html
и ссылка на SQL sqlite:http://www.sqlite.org/lang.html.

Используя SQL-команду «ALTER TABLE», вы также можете добавлять столбцы, не удаляя все содержимое таблицы. Для этого сравните выходные данные .schema в sqlite3 и выходные данные manage.py sql my_site , чтобы выяснить, какие столбцы вам нужно добавить.

Пример:

 ALTER TABLE "buildreport_series" ADD COLUMN "parameters" text
  

Ответ №2:

Используйте встроенный в Django инструмент управления базами данных:

 python manage.py dbshell
  

И выполните необходимые команды sql. sql Команда будет печатать в stdout только то, какой sql требуется для создания текущих таблиц (как определено текущими моделями).