Я рассматриваю возможность использования Django для проекта, с которого я начинаю (fyi, браузерная игра), и одна из особенностей, которые мне больше всего нравятся, - это использование syncdb
для автоматического создания таблиц базы данных основанный на моделях Django, которые я определяю (функция, которую я не могу найти в любой другой структуре). я уже думал, что это слишком хорошо, чтобы быть правдой, когда я увидел это в documentation:Изменение таблиц базы данных в Django
SyncDB не будет изменять существующие таблицы
SyncDB будет только создавать таблицы для моделей, которые еще не были установлены. Он никогда не выдает утверждения ALTER TABLE, чтобы соответствовать изменениям, внесенным в класс модели после установки. Изменения в классах моделей и схемах базы данных часто связаны с некоторой формой двусмысленности, и в этих случаях Django должен был догадываться о правильных изменениях. Существует риск того, что критические данные будут потеряны в процессе.
Если вы внесли изменения в модель и хотите изменить таблицы базы данных в соответствии с ними, используйте команду sql для отображения новой структуры SQL и сравните ее с существующей схемой таблицы для разработки изменений.
Кажется, что изменение существующих таблиц должно быть выполнено «вручную».
Что я хотел бы знать, это лучший способ сделать это. Приходят на ум два решения:
- Как указывается в документации, внесите изменения вручную в БД;
- Сделайте резервную копию базы данных, протрите ее, создайте таблицы еще раз (с помощью syncdb, так как теперь он создает таблицы с нуля) и импортирует резервные копии данных (это может занять слишком много, если база данных большая)
Любые идеи?
django-evolution, похоже, хорошо работает, спасибо! стоит отметить, что сначала нужно использовать его с самого начала (он не вычисляет необходимые изменения из существующего SQL). – gatoatigrado 2009-09-07 18:57:17