Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Июнь 14, 2007 16:45:48

ser
От:
Зарегистрирован: 2007-06-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

изменить model

Собственно, можно ли добавить в модель новое поле так, чтобы сохранить имеющиеся данные?



Офлайн

#2 Июнь 14, 2007 17:12:50

Maximbo
От:
Зарегистрирован: 2006-11-04
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

изменить model

ser
Собственно, можно ли добавить в модель новое поле так, чтобы сохранить имеющиеся данные?
Штатного средства апгрейда БД нет (?), приходится ручками проделать следующее:
* Добавить в модель новое поле
* В консоли (unix) выполнить: python manage.py sql <app_name>
* Посмотреть вывод и в соответствии с ним через ALTER TABLE изменить схему БД



Офлайн

#3 Июнь 14, 2007 18:31:57

ser
От:
Зарегистрирован: 2007-06-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

изменить model

Получил такой вывод:

BEGIN;
CREATE TABLE `todo_item` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`title` varchar(250) NOT NULL,
`created_date` datetime NOT NULL,
`priority` integer NOT NULL,
`days` integer NOT NULL,
`completed` bool NOT NULL,
`todo_list_id` integer NOT NULL
);
CREATE TABLE `todo_list` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`title` varchar(250) NOT NULL UNIQUE
);
ALTER TABLE `todo_item` ADD CONSTRAINT todo_list_id_refs_id_3d2c53d6 FOREIGN KEY
(`todo_list_id`) REFERENCES `todo_list` (`id`);
COMMIT;

Сделал SQL-запрос к бд ALTER TABLE…. Но ничего не меняется. Что не так?



Офлайн

#4 Июнь 14, 2007 22:04:06

Maximbo
От:
Зарегистрирован: 2006-11-04
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

изменить model

ser
Сделал SQL-запрос к бд ALTER TABLE…. Но ничего не меняется. Что не так?
Я не совсем это имел ввиду.
Предположим, в модель Item добавилось поле completed.
Наши действия:
* Смотрим на вывод manage.py sql todo и видим как Django нарисовал нам описание таблицы todo_item;
* Делаем к БД запрос вида ALTER TABLE `todo_item` ADD `completed` bool NOT NULL;
* Далее каким-нибудь хитрым запросом устанавливаем значение по-умолчанию для новоиспечённого поля;

Всё сказанное относится к MySQL. Как поступать с другими СУБД я не в курсе.



Офлайн

#5 Июнь 15, 2007 08:17:06

ser
От:
Зарегистрирован: 2007-06-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

изменить model

Ясно. Спасибо.



Офлайн

#6 Июнь 16, 2007 11:29:03

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

изменить model

Вот есть небольшая утилитка для автоматизации процесса миграции моделей.
http://code.google.com/p/django-schemaevolution/
поддерживает пока только MySQL базы. Фидбек из велкам.



Офлайн

#7 Июнь 21, 2007 11:15:39

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

изменить model

lorien
Прописывание в options.py # -*- coding: utf-8 устранило ворнинг
спасибо, исправим. у тебя наверно python2.5 ?
lorien
Попробовал добавить поле с помощью schema_evolution. Отработало нормально )
Отлично!:)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version