миграция django на юг: сброс схемы только для нескольких таблиц

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

Вот как выглядит моя база данных:

 public | tos_agreement                       | table | g_db_admin
 public | tos_agreementversion                | table | g_db_admin
 public | tos_signature                       | table | g_db_admin
 public | userclickstream_click               | table | g_db_admin
 public | userclickstream_stream              | table | g_db_admin
 public | vote                                | table | g_db_admin
(80 rows)

Я хочу только перестроить (сбросить все данные)
public | userclickstream_click | стол | g_db_admin публичный | userclickstream_stream | стол | g_db_admin

Как я могу сделать это, используя южную миграцию.

В моей таблице south_migrationhistory у меня есть следующее:

  15 | userclickstream   | 0001_initial                                                                | 2013-12-10 13:26:15.684678-06
  16 | userclickstream   | 0002_auto__del_field_stream_auth_user                                       | 2013-12-10 13:26:15.693485-06
  17 | userclickstream   | 0003_auto__del_field_stream_username__add_field_stream_user                 | 2013-12-10 13:26:15.721449-06

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

Я тоже думал, а если? Удалите вышеуказанные записи из south_migrationhistory и повторно запустите миграцию для этого приложения, которая создаст таблицы.

./manage.py schemamigration userclickstream --initial
./manage.py migrate userclickstream

person add-semi-colons    schedule 19.01.2014    source источник
comment
написать свою собственную миграцию?   -  person yuvi    schedule 19.01.2014


Ответы (1)


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

  1. Откройте свой терминал и напишите manage.py dumpdata > backup.json. он создаст приспособление json со всеми данными, которые в настоящее время находятся в базе данных. Таким образом, если вы что-то испортите, вы всегда сможете повторно загрузить данные с помощью manage.py loaddata backup.json (обратите внимание, что все таблицы должны быть пустыми, чтобы это работало).
  2. необязательно: передайте данные в новую базу данных разработки с помощью вышеупомянутой команды loaddata
  3. Напишите свою собственную миграцию и не беспокойтесь о том, чтобы что-то сломать, потому что у вас есть резервная копия. Это может потребовать некоторого обучения, но основная идея заключается в том, что вы создаете класс миграции с двумя функциями — прямой и обратной. Ознакомьтесь с южной документацией и медленно изучите ее.
  4. Вернитесь к SO с любым более конкретным вопросом и проблемами, которые у вас возникнут на этом пути.

Это не закодированный ответ «вот решение», но, тем не менее, я надеюсь, что это поможет.

person yuvi    schedule 19.01.2014
comment
что, если я выполню повторную инициализацию или удалю эти две таблицы, удалю записи в южной миграции, потому что я чувствую, что есть более простой способ, чем создание скрипта, такая простая работа. - person add-semi-colons; 19.01.2014
comment
приходи еще? Я не думаю, что понимаю, что вы спрашиваете - person yuvi; 19.01.2014
comment
Я отредактировал вопрос и надеюсь, что у кого-то есть лучший ответ. - person add-semi-colons; 19.01.2014
comment
Если все, что вам нужно, это удалить несколько таблиц, вы всегда можете сделать это через свой SQL. повторная инициализация не такая уж хорошая идея, потому что вы можете столкнуться со странными ошибками с другими частями приложения, которые вы хотите оставить прежними. - person yuvi; 19.01.2014
comment
Мне нужно заново создать эти таблицы. Также это приложение является вспомогательным приложением основного приложения. - person add-semi-colons; 19.01.2014
comment
Вы можете удалить данные, не удаляя таблицы. SQL: DELETE * FROM table_name; или форма джанго: Mymodel.objects.all().delete() - person yuvi; 19.01.2014
comment
Спасибо, но если у этих таблиц есть зависимость, я не смогу их удалить, верно? - person add-semi-colons; 19.01.2014
comment
Он просто удалит связанные зависимости. - person yuvi; 19.01.2014
comment
Просто попробуйте. Создайте резервную копию, как я показал вам, и вручную удалите данные. Если случится что-то плохое, просто перезагрузите резервную копию. - person yuvi; 20.01.2014