SchemaEditor¶El sistema de migraciones de Django se divide en dos partes; la lógica para calcular y almacenar qué operaciones deben ejecutarse (django.db.migrations), y la capa de abstracción de base de datos que convierte cosas como «crear un modelo» o «eliminar un campo» en SQL - lo cual es el trabajo del SchemaEditor.
It’s unlikely that you will want to interact directly with SchemaEditor as a normal developer using Django, pero si quieres escribir tu propio sistema de migraciones o tienes necesidades más avanzadas, es mucho más agradable que escribir SQL.
Cada backend de base de datos en Django proporciona su propia versión de SchemaEditor, y siempre está accesible mediante el administrador de contexto connection.schema_editor():
with connection.schema_editor() as schema_editor:
schema_editor.delete_model(MyModel)
Debe usarse mediante el administrador de contexto, ya que permite gestionar cosas como transacciones y SQL diferido (como la creación de restricciones de clave foránea).
Exposa todas las operaciones posibles como métodos, que deben llamarse en el orden en que se deseen aplicar los cambios. Algunas operaciones o tipos de cambio no son posibles en todos los bases de datos - por ejemplo, MyISAM no admite restricciones de clave foránea.
Si estás escribiendo o manteniendo un backend de base de datos de terceros para Django, necesitarás proporcionar una implementación de SchemaEditor para trabajar con la funcionalidad de migraciones de Django - sin embargo, siempre y cuando tu base de datos sea relativamente estándar en su uso del SQL y el diseño relacional, deberías poder heredar una de las clases de SchemaEditor de Django incorporadas y ajustar un poco la sintaxis.
execute()¶Ejecuta la sentencia SQL pasada, con parámetros si se suministran. Esto es un envoltorio alrededor de los cursores de base de datos normales que permite capturar el SQL a un archivo .sql si el usuario lo desea.
create_model()¶Crea una nueva tabla en la base de datos para el modelo proporcionado, junto con cualquier restricción única o índice que requiera.
delete_model()¶Borra la tabla del modelo en la base de datos junto con cualquier restricción única o índice que tenga.
Agrega index a la tabla del modelo.
Elimina index de la tabla del modelo.
Renombra old_index de la tabla del modelo a new_index.
Agrega constraint a la tabla del modelo.
Quita la constraint de la tabla del modelo.
alter_unique_together()¶Cambia el valor de unique_together del modelo; esto agregará o eliminará restricciones únicas de la tabla del modelo hasta que coincidan con el nuevo valor.
alter_index_together()¶Cambia el valor de index_together del modelo; esto agregará o eliminará índices de la tabla del modelo hasta que coincidan con el nuevo valor.
alter_db_table()¶Renombra la tabla del modelo desde old_db_table a new_db_table.
alter_db_table_comment()¶Cambia el comentario de la tabla del model a new_db_table_comment.
alter_db_tablespace()¶Moves el modelo de la tabla a otra.
Agrega una columna (o en ocasiones varias) a la tabla del modelo para representar el campo. Esto también agrega índices o una restricción única si el campo tiene db_index=True o unique=True.
Si el campo es un ManyToManyField sin valor para through, en lugar de crear una columna, crea una tabla para representar la relación. Si se proporciona through, no hace nada.
Si el campo es un ForeignKey, esto también agrega la restricción de clave foránea a la columna.
Elimina las columnas que representan el campo de la tabla del modelo, junto con cualquier restricción única, restricciones de clave foránea o índices causados por ese campo.
Si el campo es un ManyToManyField sin valor para through, elimina la tabla creada para rastrear la relación. Si se proporciona through, no hace nada.
Esta transforma el campo del modelo desde el antiguo campo al nuevo. Esto incluye cambiar el nombre de la columna (la atributo db_column), cambiar el tipo de campo (si cambia la clase de campo), cambiar el estado NULL del campo, agregar o eliminar restricciones únicas y índices solo para campos, cambiar la clave primaria y cambiar el destino de las restricciones de clave foránea.
La traducción de los textos es la siguiente:
Si la base de datos tiene el supports_combined_alters, Django intentará realizar tantas de estas en una sola llamada a la base de datos como sea posible; de lo contrario, emitirá un statement ALTER por cada cambio, pero no emitirá ALTERs donde no se requiere ningún cambio.
Todas las atributos deben considerarse como solo lectura a menos que se indique lo contrario.
connection¶Un objeto de conexión a la base de datos. Una útil atributo del objeto de conexión es alias el cual puede usarse para determinar el nombre de la base de datos que está siendo accedida.
Esto es útil cuando se están haciendo migraciones de datos para migraciones con múltiples bases de datos.
may 31, 2026