Python Orm - PullRequest
       5

Python Orm

2 голосов
/ 20 мая 2009

Это вопрос теории новичка - я только начинаю использовать Python и изучаю Django и orm. Вопрос: Если я разрабатываю свои объекты и посредством дополнительной разработки изменяю структуры базовых объектов, наследование и т. Д. - будет ли решение ORM Django автоматически изменять базу данных ИЛИ мне нужно выполнять преобразование (если приложение работает)?

Итак, я начинаю с базового приложения для телефона Объект лица: имя, адрес, город, штат, почтовый индекс, телефон и я перехожу на Персона объекта: название, имя, адрес, город, штат, почтовый индекс, объект телефона Телефон объекта: тип, телефон №

Должен ли я вручную конвертировать через базу данных и изменять код ИЛИ промежуточное программное обеспечение ORM вносит изменения? и если да - как?

Ответы [ 3 ]

5 голосов
/ 20 мая 2009

Начиная с Django 1.02 (и с последней версии 1.1 в Subversion), автоматическая «миграция схемы» отсутствует. Вы можете удалить схему и заставить Django воссоздать ее (с помощью manage.py syncdb) или вручную изменить схему.

На горизонте есть несколько инструментов для миграции схемы Django. (Я смотрю Юг .)

4 голосов
/ 20 мая 2009

Книга Django освещает эту проблему в главе 5 , ближе к концу главы (или внизу страницы, в веб-издании). В основном, правила таковы:

  • Когда добавляет поле, сначала добавьте его в базу данных вручную (например, ALTER TABLE), а затем добавьте поле в модель. (Вы можете использовать manage.py sqlall, чтобы увидеть, какой SQL-оператор выполнить.)
  • При удалении поля удалите его из вашей модели и затем выполните соответствующий оператор SQL, чтобы удалить столбец (например, команду ALTER TABLE) и все таблицы соединений, которые были созданы.
  • Переименование поля - это комбинация добавления / удаления полей и копирования данных.

Итак, чтобы ответить на ваш вопрос, в случае с Django, нет, ORM не обработает для вас изменения - но это не так сложно сделать. См. Эту главу книги (ссылка выше) для получения дополнительной информации.

0 голосов
/ 20 мая 2009

Мы включаем номер «версии» в название приложения.

Наши каталоги выглядят так

project
    settings.py
    appA_1
        __init__.py
        models.py
        tests.py
    appB_1 
        __init__.py
        models.py
        tests.py   
    appB_2
        __init__.py
        models.py
        tests.py

Это показывает две версии appB. appB_1 был оригинальной версией. Когда мы изменили модель, мы начали с копирования приложения для создания appB_2, а затем изменили его.

A manage.py syncdb создаст новое новое приложениеB_2.

Мы должны выгрузить и перезагрузить таблицы, скопировав из appB_1 в appB_2. Один раз.

Тогда мы можем удалить appB_1 из settings.py. Позже мы можем удалить таблицы из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...