SchemaEditor
¶
Djangos migreringssystem Àr uppdelat i tvÄ delar; logiken för att berÀkna och lagra vilka operationer som ska köras (django.db.migrations
), och databasabstraktionslagret som omvandlar saker som âskapa en modellâ eller âta bort ett fĂ€ltâ till SQL - vilket Ă€r jobbet för SchemaEditor
.
Det Àr osannolikt att du kommer att vilja interagera direkt med SchemaEditor
som en vanlig utvecklare som anvÀnder Django, men om du vill skriva ditt eget migrationssystem eller har mer avancerade behov Àr det mycket trevligare Àn att skriva SQL.
Varje databasbackend i Django tillhandahÄller sin egen version av SchemaEditor
, och den Àr alltid tillgÀnglig via kontexthanteraren connection.schema_editor()
:
with connection.schema_editor() as schema_editor:
schema_editor.delete_model(MyModel)
Den mÄste anvÀndas via kontexthanteraren eftersom den dÄ kan hantera saker som transaktioner och uppskjuten SQL (som att skapa ForeignKey
-begrÀnsningar).
Den exponerar alla möjliga operationer som metoder, som ska anropas i den ordning du vill att Àndringarna ska tillÀmpas. Vissa möjliga operationer eller typer av Àndringar Àr inte möjliga i alla databaser - MyISAM stöder t.ex. inte begrÀnsningar för frÀmmande nycklar.
Om du skriver eller underhÄller en tredjeparts databasbackend för Django mÄste du tillhandahÄlla en SchemaEditor
-implementering för att kunna arbeta med Djangos migreringsfunktionalitet - men sÄ lÀnge din databas Àr relativt standard i sin anvÀndning av SQL och relationsdesign bör du kunna underordna en av de inbyggda Django SchemaEditor
-klasserna och justera syntaxen lite.
Metoder¶
execute()`
¶
Exekverar den SQL-sats som skickas in, med eventuella parametrar. Detta Àr ett omslag runt de normala databasmarkörerna som gör det möjligt att fÄnga SQL till en .sql
-fil om anvÀndaren sÄ önskar.
skapa_modell()`
¶
Skapar en ny tabell i databasen för den angivna modellen, tillsammans med eventuella unika begrÀnsningar eller index som krÀvs.
delete_model()
¶
Tar bort modellens tabell i databasen tillsammans med alla unika begrÀnsningar eller index som den har.
add_index()`
¶
LĂ€gger till index
till model
âs tabell.
remove_index()
¶
Tar bort index
frÄn modell
:s tabell.
rename_index()
¶
Byter namn pÄ old_index
frÄn model
âs tabell till new_index
.
add_constraint()
¶
LĂ€gger till constraint
till model
âs tabell.
remove_constraint()
¶
Tar bort constraint
frÄn model
âs tabell.
alter_unique_together()
¶
- BaseDatabaseSchemaEditor.alter_unique_together(model, old_unique_together, new_unique_together)[source]¶
Ăndrar en modells unique_together
-vÀrde; detta kommer att lÀgga till eller ta bort unika begrÀnsningar frÄn modellens tabell tills de matchar det nya vÀrdet.
alter_index_together()
¶
- BaseDatabaseSchemaEditor.alter_index_together(model, old_index_together, new_index_together)[source]¶
Ăndrar en modells index_together
-vÀrde; detta kommer att lÀgga till eller ta bort index frÄn modellens tabell tills de matchar det nya vÀrdet.
alter_db_table()
¶
Byter namn pÄ modellens tabell frÄn old_db_table
till new_db_table
.
alter_db_table_comment()
¶
- BaseDatabaseSchemaEditor.alter_db_table_comment(model, old_db_table_comment, new_db_table_comment)[source]¶
Ăndra tabellkommentaren för model
till new_db_table_comment
.
alter_db_tablespace()
¶
Flyttar modellens tabell frÄn ett tablespace till ett annat.
add_field()
¶
LÀgger till en kolumn (eller ibland flera) i modellens tabell för att representera fÀltet. Detta kommer ocksÄ att lÀgga till index eller en unik begrÀnsning om fÀltet har db_index=True
eller unique=True
.
Om fÀltet Àr ett ManyToManyField
utan ett vÀrde för through
skapas en tabell för att representera relationen istÀllet för en kolumn. Om through
anges Àr det ett no-op.
Om fÀltet Àr en ForeignKey
lÀggs Àven begrÀnsningen för frÀmmande nyckel till i kolumnen.
remove_field()
¶
Tar bort den eller de kolumner som representerar fÀltet frÄn modellens tabell, tillsammans med eventuella unika begrÀnsningar, begrÀnsningar för frÀmmande nycklar eller index som orsakas av fÀltet.
Om fÀltet Àr ett ManyToMany-fÀlt utan ett vÀrde för through
tas den tabell bort som skapats för att spÄra relationen. Om through
anges Àr det ett no-op.
Ăndra_fĂ€lt()
¶
Detta omvandlar fÀltet i modellen frÄn det gamla fÀltet till det nya. Detta inkluderar Àndring av kolumnens namn (attributet db_column
), Àndring av fÀltets typ (om fÀltklassen Àndras), Àndring av fÀltets NULL
-status, tillÀgg eller borttagning av unika begrÀnsningar och index för enbart fÀlt, Àndring av primÀrnyckel och Àndring av destinationen för ForeignKey
-begrÀnsningar.
Den vanligaste transformationen som detta inte kan göra Àr att omvandla ett ManyToManyField
till ett vanligt fÀlt eller vice versa; Django kan inte göra detta utan att förlora data, och dÀrför kommer det att vÀgra att göra det. IstÀllet bör remove_field()
och add_field()
anropas separat.
Om databasen har stödjer_kombinerade_alters
, kommer Django att försöka göra sÄ mÄnga av dessa i ett enda databasanrop som möjligt; annars kommer det att utfÀrda en separat ALTER-sats för varje Àndring, men kommer inte att utfÀrda ALTER dÀr ingen Àndring krÀvs.
Attribut¶
Alla attribut ska betraktas som skrivskyddade om inget annat anges.
anslutning
¶
- SchemaEditor.connection¶
Ett anslutningsobjekt till databasen. Ett anvÀndbart attribut för anslutningen Àr alias
som kan anvÀndas för att bestÀmma namnet pÄ den databas som nÄs.
Detta Àr anvÀndbart nÀr du gör datamigreringar för migreringar med flera databaser.