Spec-Zone.ru › Django 1.8

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.8/ref/schema-editor/

Spec-Zone.ru

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