Spec-Zone.ru › Django 1.9

SchemaEditor

class BaseDatabaseSchemaEditor [source]

Система миграций Django разделена на две части: логика вычисления и хранения операций, которые необходимо выполнить (django.db.migrations), и уровень абстракции базы данных, преобразующий такие действия, как «создание модели» или «удаление поля», в SQL-запросы. Это задача SchemaEditor.

Вряд ли вам, как обычному разработчику Django, понадобится напрямую взаимодействовать с SchemaEditor, но если вы хотите написать собственную систему миграций или иметь более продвинутые потребности, это значительно удобнее, чем писать SQL.

Каждый базовый модуль базы данных в Django предоставляет собственную реализацию SchemaEditor, и к ней всегда можно получить доступ через менеджер контекста connection.schema_editor().

with connection.schema_editor() as schema_editor:
    schema_editor.delete_model(MyModel)

Его необходимо использовать через менеджер контекста, так как это позволяет управлять такими вещами, как транзакции и отложенные SQL-запросы (например, создание ForeignKey ограничений).

Он предоставляет все возможные операции в виде методов, которые должны вызываться в порядке, в котором вы хотите применить изменения. Некоторые возможные операции или типы изменений недоступны для всех баз данных — например, MyISAM не поддерживает ограничения внешнего ключа.

Если вы пишете или поддерживаете сторонний модуль базы данных для Django, вам необходимо предоставить реализацию SchemaEditor для работы с функциональностью миграций версии 1.7. Однако, если ваша база данных относительно стандартно использует SQL и реляционное проектирование, вы сможете расширить один из встроенных классов Django SchemaEditor и немного скорректировать синтаксис. Обратите также внимание на несколько новых функций базы данных, которые будут искать миграции: can_rollback_ddl и supports_combined_alters являются наиболее важными.

Методы

execute()

BaseDatabaseSchemaEditor.execute(sql, params=[]) [source]

Выполняет переданный SQL-запрос с параметрами, если они указаны. Это простой обёртный класс для обычных курсоров базы данных, который позволяет сохранить SQL в файл .sql по желанию пользователя.

create_model()

BaseDatabaseSchemaEditor.create_model(model) [source]

Создаёт новую таблицу в базе данных для указанной модели, а также все уникальные ограничения или индексы, которые она требует.

delete_model()

BaseDatabaseSchemaEditor.delete_model(model) [source]

Удаляет таблицу модели в базе данных вместе с любыми уникальными ограничениями или индексами, связанными с ней.

alter_unique_together()

BaseDatabaseSchemaEditor.alter_unique_together(model, old_unique_together, new_unique_together) [source]

Изменяет значение unique_together модели; это добавит или удалит уникальные ограничения из таблицы модели до тех пор, пока они не будут соответствовать новому значению.

alter_index_together()

BaseDatabaseSchemaEditor.alter_index_together(model, old_index_together, new_index_together) [source]

Изменяет значение index_together модели; это добавит или удалит индексы из таблицы модели до тех пор, пока они не будут соответствовать новому значению.

alter_db_table()

BaseDatabaseSchemaEditor.alter_db_table(model, old_db_table, new_db_table) [source]

Переименовывает таблицу модели из old_db_table в new_db_table.

alter_db_tablespace()

BaseDatabaseSchemaEditor.alter_db_tablespace(model, old_db_tablespace, new_db_tablespace) [source]

Перемещает таблицу модели из одного пространства таблиц в другое.

add_field()

BaseDatabaseSchemaEditor.add_field(model, field) [source]

Добавляет столбец (или несколько) в таблицу модели для представления поля. Также будут добавлены индексы или уникальные ограничения, если у поля есть db_index=True или unique=True.

Если поле — это ManyToManyField без значения для through, вместо создания столбца будет создана таблица для представления связи. Если through указано, это бесполезно.

Если поле является ForeignKey, это также добавит ограничение внешнего ключа к столбцу.

remove_field()

BaseDatabaseSchemaEditor.remove_field(model, field) [source]

Удаляет столбец(ы), представляющие поле из таблицы модели, а также любые уникальные ограничения, ограничения внешнего ключа или индексы, вызванные этим полем.

Если поле является ManyToManyField без значения для through, оно удалит таблицу, созданную для отслеживания связи. Если through указано, это бесполезно.

alter_field()

BaseDatabaseSchemaEditor.alter_field(model, old_field, new_field, strict=False) [source]

Преобразует поле модели со старого поля на новое. Это включает изменение имени столбца (атрибут db_column), изменение типа поля (если класс поля меняется), изменение статуса NULL поля, добавление или удаление уникальных ограничений и индексов, относящихся только к полю, изменение первичного ключа и изменение назначения ForeignKey ограничений.

Наиболее распространённое преобразование, которое невозможно выполнить — это преобразование ManyToManyField в обычное поле или наоборот; Django не может этого сделать без потери данных, поэтому откажется это сделать. Вместо этого необходимо вызвать remove_field() и add_field() по отдельности.

Если у базы данных есть supports_combined_alters, Django попытается выполнить как можно больше этих операций в одном вызове базы данных; в противном случае он выдаст отдельный запрос ALTER для каждого изменения, но не выдаст ALTER, где изменения не требуются (как часто делал South).

Атрибуты

Все атрибуты следует считать только для чтения, если не указано иное.

connection

SchemaEditor.connection

Объект подключения к базе данных. Полезный атрибут подключения — это alias, который можно использовать для определения имени базы данных, к которой осуществляется доступ.

Это полезно при выполнении миграций данных для миграций с несколькими базами данных.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.9/ref/schema-editor/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API