SchemaEditor
¶
-
класс
BaseDatabaseSchemaEditor
¶
Система миграции Django разделена на две части; логика для расчета и хранения операций, которые должны быть запущены ( django.db.migrations
), и уровень абстракции базы данных, который превращает такие вещи, как «создание модели» или «удаление поля» в SQL, - что является задачей SchemaEditor
.
Маловероятно, что вы захотите напрямую взаимодействовать с SchemaEditor
обычным разработчиком, использующим Django, но если вы хотите написать свою собственную систему миграции или у вас есть более продвинутые потребности, это намного лучше, чем писать SQL.
Каждая серверная часть базы данных в Django предоставляет свою собственную версию SchemaEditor
, и она всегда доступна через connection.schema_editor()
диспетчер контекста:
with connection.schema_editor() as schema_editor:
schema_editor.delete_model(MyModel)
Его необходимо использовать через диспетчер контекста, поскольку это позволяет ему управлять такими вещами, как транзакции и отложенный SQL (например, создание ForeignKey
ограничений).
Он предоставляет все возможные операции как методы, которые должны вызываться в том порядке, в котором вы хотите применить изменения. Некоторые возможные операции или типы изменений возможны не для всех баз данных - например, MyISAM не поддерживает ограничения внешнего ключа.
Если вы пишете или обслуживаете стороннюю базу данных для Django, вам нужно будет предоставить SchemaEditor
реализацию для работы с функцией миграции Django - однако, если ваша база данных относительно стандартна в использовании SQL и реляционного дизайна, у вас должна быть возможность создать подкласс одного из встроенных SchemaEditor
классов Django и немного настроить синтаксис.
Методы ¶
execute()
¶
-
BaseDatabaseSchemaEditor.
execute
( sql , params = [] ) ¶
Выполняет переданный оператор SQL с параметрами, если они указаны. Это оболочка вокруг обычных курсоров базы данных, которая позволяет записывать SQL в .sql
файл, если пользователь желает.
create_model()
¶
-
BaseDatabaseSchemaEditor.
create_model
( модель ) ¶
Создает новую таблицу в базе данных для предоставленной модели вместе со всеми необходимыми уникальными ограничениями или индексами.
delete_model()
¶
-
BaseDatabaseSchemaEditor.
delete_model
( модель ) ¶
Удаляет таблицу модели в базу данных вместе со всеми имеющимися у нее уникальными ограничениями или индексами.
remove_index()
¶
-
BaseDatabaseSchemaEditor.
remove_index
( модель , индекс ) ¶
Удаляет index
из model
таблицы.
add_constraint()
¶
-
BaseDatabaseSchemaEditor.
add_constraint
( модель , ограничение ) ¶
Добавляет constraint
в model
таблицу.
remove_constraint()
¶
-
BaseDatabaseSchemaEditor.
remove_constraint
( модель , ограничение ) ¶
Удаляет constraint
из model
таблицы.
alter_unique_together()
¶
-
BaseDatabaseSchemaEditor.
alter_unique_together
( модель , старая_уникальная_ совокупная , новая_уникальная_ совокупная ) ¶
Изменяет unique_together
стоимость модели ; это добавит или удалит уникальные ограничения из таблицы модели, пока они не совпадут с новым значением.
alter_index_together()
¶
-
BaseDatabaseSchemaEditor.
alter_index_together
( модель , старый_индекс_ совокупно , новый_индекс_ совокупно ) ¶
Изменяет index_together
стоимость модели ; это добавит или удалит индексы из таблицы модели, пока они не совпадут с новым значением.
alter_db_table()
¶
-
BaseDatabaseSchemaEditor.
alter_db_table
( модель , old_db_table , new_db_table ) ¶
Переименовывает таблицу модели с old_db_table
на new_db_table
.
alter_db_tablespace()
¶
-
BaseDatabaseSchemaEditor.
alter_db_tablespace
( модель , old_db_tablespace , new_db_tablespace ) ¶
Перемещает таблицу модели из одного табличного пространства в другое.
add_field()
¶
-
BaseDatabaseSchemaEditor.
add_field
( модель , поле ) ¶
Добавляет столбец (или иногда несколько) в таблицу модели для представления поля. Это также добавит индексы или уникальное ограничение, если в поле есть db_index=True
или unique=True
.
Если поле ManyToManyField
не имеет значения through
, вместо создания столбца будет создана таблица для представления взаимосвязи. Если
through
предоставляется, это не работает.
Если это поле ForeignKey
, это также добавит ограничение внешнего ключа в столбец.
remove_field()
¶
-
BaseDatabaseSchemaEditor.
remove_field
( модель , поле ) ¶
Удаляет столбцы, представляющие поле из таблицы модели, вместе с любыми уникальными ограничениями, ограничениями внешнего ключа или индексами, вызванными этим полем.
Если поле является ManyToManyField без значения для through
, оно удалит таблицу, созданную для отслеживания взаимосвязи. Если
through
предоставляется, это не работает.
alter_field()
¶
-
BaseDatabaseSchemaEditor.
alter_field
( модель , старое_филд , новое_филд , строгое = Ложь ) ¶
Это преобразует поле модели из старого поля в новое. Это включает в себя изменение имени столбца (
db_column
атрибута), изменение типа поля (если изменяется класс поля), изменение NULL
статуса поля, добавление или удаление уникальных ограничений и индексов только для поля, изменение первичного ключа и изменение назначения ForeignKey
ограничений.
Наиболее распространенное преобразование, которое это не может сделать, - это преобразование a
ManyToManyField
в нормальное поле или наоборот; Django не может сделать это без потери данных, поэтому он откажется это сделать. Вместо этого
remove_field()
и add_field()
следует называть отдельно.
Если база данных имеет supports_combined_alters
, Django попытается выполнить как можно больше из них за один вызов базы данных; в противном случае он будет выдавать отдельный оператор ALTER для каждого изменения, но не будет выдавать ALTER, если никаких изменений не требуется.
Атрибуты ¶
Все атрибуты должны считаться доступными только для чтения, если не указано иное.
connection
¶
-
SchemaEditor.
connection
¶
Объект подключения к базе данных. Полезный атрибут соединения,
alias
который можно использовать для определения имени базы данных, к которой осуществляется доступ.
Это полезно при выполнении миграции данных для миграции с несколькими базами данных .