SchemaEditor
¶
-
класс
BaseDatabaseSchemaEditor
¶
Система миграции Django разделена на две части: логика для расчета и хранения операций для выполнения ( django.db.migrations
) и уровень абстракции базы данных, который преобразует такие вещи, как «построить модель» или «удалить». поле 'в коде SQL, за которое отвечает SchemaEditor
.
SchemaEditor
Как обычный разработчик Django, вам вряд ли придется напрямую взаимодействовать с экземпляром , но если вы хотите написать свою собственную систему миграции или у вас есть более сложные потребности, это намного лучше, чем необходимость написать код SQL.
Движок базы данных Chae в Django предоставляет свою собственную версию SchemaEditor
, которая всегда доступна через диспетчер контекста connection.schema_editor()
:
with connection.schema_editor() as schema_editor:
schema_editor.delete_model(MyModel)
Его следует использовать через диспетчер контекста, поскольку он помогает обрабатывать такие вещи, как транзакции и отложенный код SQL (например, создание ограничений внешнего ключа).
Этот редактор предоставляет все возможные операции в виде методов, которые необходимо вызывать в желаемом порядке применения изменений. Некоторые операции или типы модификации не всегда возможны в зависимости от базы данных; например, механизм MySQL MyISAM
не обрабатывает ограничения внешнего ключа.
Если вы пишете или обслуживаете ядро базы данных вне кода Django, вам нужно будет предоставить реализацию SchemaEditor
для поддержки функций миграции, доступных в Django 1.7. Однако, если рассматриваемая база данных в целом соответствует стандартам SQL и реляционного дизайна, должна существовать возможность наследования от одного SchemaEditor
из классов Django и незначительной настройки синтаксиса. Также обратите внимание, что миграции будут относиться к некоторым DatabaseFeatures
функциям базы данных (классов ), включая флаги can_rollback_ddl
и supports_combined_alters
.
Методы ¶
execute()
¶
-
BaseDatabaseSchemaEditor.
execute
( sql , params = [] ) ¶
Выполняет переданный оператор SQL с учетом параметров, если они есть. Это адаптация обычных курсоров базы данных, которая добавляет возможность захвата сгенерированного кода SQL в файл, .sql
если пользователь желает.
create_model()
¶
-
BaseDatabaseSchemaEditor.
create_model
( модель ) ¶
Создает новую таблицу базы данных, соответствующую указанному шаблону, включая ограничения уникальности и необходимые индексы.
delete_model()
¶
-
BaseDatabaseSchemaEditor.
delete_model
( модель ) ¶
Удаляет таблицу базы данных, соответствующую указанной модели, а также любые существующие ограничения уникальности и индекса.
add_index()
¶
-
BaseDatabaseSchemaEditor.
add_index
( модель , индекс ) ¶
Добавляет index
в таблицу 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
и unique
поля.
Если поле является экземпляром ManyToManyField
без определенного значения through
, этот метод создает таблицу для представления связи вместо создания столбца. Если through
для этого поля указано значение, это пустая операция.
Если поле является экземпляром ForeignKey
, этот метод также добавляет ограничения внешнего ключа для затронутого столбца.
remove_field()
¶
-
BaseDatabaseSchemaEditor.
remove_field
( модель , поле ) ¶
Удаляет столбцы, представляющие поле в таблице, соответствующей модели, а также любые ограничения уникальности, внешнего ключа или индекса, которые могли быть созданы для этого поля.
Если поле является экземпляром ManyToManyField
без определенного значения through
, этот метод удаляет таблицу, созданную для установления связи. Если through
для этого поля указано значение, это пустая операция.
alter_field()
¶
-
BaseDatabaseSchemaEditor.
alter_field
( модель , старое поле , новое поле , строгое = Ложь ) Fal
Этот метод преобразует поле шаблона old_field
в соответствие new_field
. Это включает изменение имени столбца (атрибута db_column
), изменение типа поля (если класс поля отличается), изменение состояния NULL
поля, добавление или удаление ограничений уникальности. или индексы, связанные с одним полем, изменение состояния первичного ключа и изменение назначения ограничения ForeignKey
.
Наиболее частое преобразование, которое не может выполнить этот метод, - преобразование поля ManyToManyField
в нормальное поле и наоборот; Django не может сделать это без потери данных, поэтому он откажется это сделать. В любом случае для этого нужно отдельно добавить операции удаления ( remove_field()
) и добавления ( add_field()
) полей .
Если база данных поддерживает комбинированные (помеченные supports_combined_alters
) изменения , Django пытается выполнить как можно больше этих операций за один вызов базы данных; в противном случае он выдает отдельный оператор ALTER для каждого изменения, но он не выдает оператор ALTER, если никаких изменений не требуется.
Атрибуты ¶
Все атрибуты должны считаться доступными только для чтения, если не указано иное.
connection
¶
-
SchemaEditor.
connection
¶
Объект подключения к базе данных. Полезный атрибут соединения - это alias
то, что можно использовать для определения имени базы данных, к которой осуществляется доступ.
Это полезно во время миграции данных для миграции с несколькими базами данных .