SchemaEditor¶
-
class
BaseDatabaseSchemaEditor¶
Django's migration system is split into two parts; the logic for calculating
and storing what operations should be run (django.db.migrations), and the
database abstraction layer that turns things like "create a model" or
"delete a field" into SQL - which is the job of the SchemaEditor.
It's unlikely that you will want to interact directly with SchemaEditor as
a normal developer using Django, but if you want to write your own migration
system, or have more advanced needs, it's a lot nicer than writing SQL.
Each database backend in Django supplies its own version of SchemaEditor,
and it's always accessible via the connection.schema_editor() context
manager:
with connection.schema_editor() as schema_editor:
schema_editor.delete_model(MyModel)
It must be used via the context manager as this allows it to manage things
like transactions and deferred SQL (like creating ForeignKey constraints).
It exposes all possible operations as methods, that should be called in the order you wish changes to be applied. Some possible operations or types of change are not possible on all databases - for example, MyISAM does not support foreign key constraints.
If you are writing or maintaining a third-party database backend for Django,
you will need to provide a SchemaEditor implementation in order to work with
Django's migration functionality - however, as long as your database is
relatively standard in its use of SQL and relational design, you should be able
to subclass one of the built-in Django SchemaEditor classes and tweak the
syntax a little.
Cara¶
execute()¶
-
BaseDatabaseSchemaEditor.execute(sql, params=[])¶
Executes the SQL statement passed in, with parameters if supplied. This
is a wrapper around the normal database cursors that allows capture of the SQL
to a .sql file if the user wishes.
create_model()¶
-
BaseDatabaseSchemaEditor.create_model(model)¶
Membuat sebuah tabel baru dalam basisdata untuk model yang disediakan, bersama dengan batasan unik apapun atau indeks-indeks dia butuhkan.
delete_model()¶
-
BaseDatabaseSchemaEditor.delete_model(model)¶
Jatuhkan tabel model dalam basisdata bersama dengan batasan unik apapun atau indeks itu punya.
add_constraint()¶
-
BaseDatabaseSchemaEditor.add_constraint(model, constraint)¶
Adds constraint to model's table.
remove_constraint()¶
-
BaseDatabaseSchemaEditor.remove_constraint(model, constraint)¶
Removes constraint from model's table.
alter_unique_together()¶
-
BaseDatabaseSchemaEditor.alter_unique_together(model, old_unique_together, new_unique_together)¶
Changes a model's unique_together value; this
will add or remove unique constraints from the model's table until they match
the new value.
alter_index_together()¶
-
BaseDatabaseSchemaEditor.alter_index_together(model, old_index_together, new_index_together)¶
Changes a model's index_together value; this
will add or remove indexes from the model's table until they match the new
value.
alter_db_table()¶
-
BaseDatabaseSchemaEditor.alter_db_table(model, old_db_table, new_db_table)¶
Renames the model's table from old_db_table to new_db_table.
alter_db_tablespace()¶
-
BaseDatabaseSchemaEditor.alter_db_tablespace(model, old_db_tablespace, new_db_tablespace)¶
Memindahkan tabel model dari sat tablespace ke lainnya.
add_field()¶
-
BaseDatabaseSchemaEditor.add_field(model, field)¶
Adds a column (or sometimes multiple) to the model's table to represent the
field. This will also add indexes or a unique constraint
if the field has db_index=True or unique=True.
If the field is a ManyToManyField without a value for through, instead
of creating a column, it will make a table to represent the relationship. If
through is provided, it is a no-op.
If the field is a ForeignKey, this will also add the foreign key
constraint to the column.
remove_field()¶
-
BaseDatabaseSchemaEditor.remove_field(model, field)