Ecto-schemas og databasemigrationer
Definér Ecto-schemas til at knytte Elixir-strukturer til databasetabeller, og administrér schemaændringer med migrationer.
Ecto-schemas og databasemigrationer er en gratis Elixir og Phoenix: Skalerbar backend-udvikling-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Elixir og Phoenix: Skalerbar backend-udvikling, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Elixir og Phoenix: Skalerbar backend-udvikling-kurset indeholder 4 lektioner i alt.
Hvad er Ecto?
Velkommen til Ecto! Det er Elixirs effektive værktøjssæt til interaktion med databaser. Forestil dig det som broen mellem Elixir-data og din database.
Ecto er ikke en traditionel objektrelationel mapper (ORM). Det er i stedet en datamapper. Det betyder, at fokus er på at knytte data mellem din Elixir-applikation (ved hjælp af structs) og dine databasetabeller, så du får mere kontrol og mindre 'magi'.
Elixir-structs: Datastrukturer
Før Ecto knytter data til en database, bruger Elixir structs til at definere datastrukturer. En struct er en særlig type map, der sikrer et foruddefineret sæt nøgler og standardværdier.
Ecto-skemaer bygger videre på denne idé og udvider structs, så de forstår, hvordan deres felter svarer til databasekolonner.
Prøv at køre dette simple struct-eksempel:
defmodule UserData do
defstruct name: "", age: 0, email: ""
end
# Create struct instances
user1 = %UserData{name: "Alice", age: 30}
user2 = %UserData{email: "bob@example.com"}
IO.puts "User 1: #{inspect user1}"
IO.puts "User 2: #{inspect user2}"
IO.puts "User 1's age: #{user1.age}"Definer et Ecto-skema
Et Ecto-skema er et Elixir-modul, der beskriver, hvordan en Elixir-struct svarer til en databasetabel. Det definerer felterne, deres typer og eventuelle særlige indstillinger.
Sådan definerer du et grundlæggende User-skema, der svarer til en users-tabel i din database:
defmodule MyApp.User do
use Ecto.Schema
schema "users" do
field :name, :string
field :email, :string
field :age, :integer
timestamps()
end
endAlmindelige felttyper i skemaer
Når du definerer felter i dit skema, angiver du deres type. Ecto indeholder mange almindelige typer, der svarer direkte til databasetyper:
:string: Til tekstdata (f.eks. navne og e-mailadresser).:integer: Til hele tal.:floateller:decimal: Til tal med decimaler.:boolean: Til værdierne sand/falsk.:datetimeeller:naive_datetime: Til dato- og tidsværdier.:binary: Til rå binære data.
Hvis du vælger den rigtige type, kan Ecto validere data og oprette passende databasekolonner.
Primærnøgler og tidsstempler
Ecto-skemaer indeholder automatisk en primærnøgle, som normalt er en id-kolonne af typen :integer. Du behøver ikke definere den eksplicit.
Makroen timestamps() er meget praktisk! Den tilføjer automatisk to felter til dit skema og din databasetabel:
:inserted_at: Gemmer, hvornår posten blev oprettet.:updated_at: Gemmer, hvornår posten sidst blev ændret.
Disse felter er afgørende for at holde styr på ændringer og administreres automatisk af Ecto.
Introduktion til databasemigreringer
Dine Ecto-skemaer definerer den *ønskede* struktur for din database. Men hvordan anvender du disse ændringer på den faktiske database?
Det er her, migreringer kommer ind i billedet! En migrering er et Elixir-script, der beskriver ændringer i dit databaseskema, f.eks. oprettelse af tabeller, tilføjelse af kolonner eller ændring af typer. De sikrer, at dit databaseskema udvikler sig på en kontrolleret måde med versionsstyring.
Generering af en migreringsfil
Du opretter nye migreringsfiler med Mix-kommandoen mix ecto.gen.migration. Du angiver et beskrivende navn til migreringen:
mix ecto.gen.migration create_users_tableDenne kommando genererer en ny Elixir-fil i mappen priv/repo/migrations. Filnavnet indeholder et tidsstempel, så migreringerne anvendes i den rigtige rækkefølge.
En migrerings opbygning
En migreringsfil indeholder et Elixir-modul med en change/0-funktion. I denne funktion definerer du dine databasehandlinger. Her er et eksempel på oprettelse af en tabel:
defmodule MyApp.Repo.Migrations.CreateUsersTable do
use Ecto.Migration
def change do
create table(:users) do
add :name, :string, null: false
add :email, :string, null: false
add :age, :integer
timestamps()
end
create unique_index(:users, [:email])
end
endKørsel af dine migreringer
Når du har defineret dine migreringer, anvender du dem på din database med endnu en Mix-kommando:
mix ecto.migrateEcto holder styr på, hvilke migreringer der er blevet kørt. Hvis du vil fortryde den seneste migrering, kan du bruge mix ecto.rollback.
Kør altid migreringer i dit udviklingsmiljø først, så du opdager eventuelle problemer!
Skema kontra migrering
Lad os se, om du har forstået Ecto-skemaer og migreringer.
Opsummering: Skemaer og migreringer
Du har taget det første skridt ind i Ecto!
- Vi lærte, at Ecto-skemaer definerer, hvordan Elixir-structs svarer til databasetabeller, herunder felter og typer.
- Vi gennemgik, hvordan migreringer er versionsstyrede scripts, der anvender disse skemaændringer på din faktiske database.
- Du ved nu, hvordan du definerer et grundlæggende skema, genererer migreringsfiler og anvender dem med Mix-kommandoer.
Nu går vi i dybden med, hvordan du interagerer med din database ved hjælp af Ecto.Repo og sikrer dataintegritet med Changesets.
Lær Elixir med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Ecto-schemas og databasemigrationer” gratis?
Ja — hele teksten til “Ecto-schemas og databasemigrationer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Elixir og Phoenix: Skalerbar backend-udvikling-kurset, skal du opgradere til CoddyKit PRO. Elixir og Phoenix: Skalerbar backend-udvikling-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Ecto-schemas og databasemigrationer”?
Definér Ecto-schemas til at knytte Elixir-strukturer til databasetabeller, og administrér schemaændringer med migrationer. Du øver dig i Elixir og Phoenix: Skalerbar backend-udvikling med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Elixir og Phoenix: Skalerbar backend-udvikling?
Der kræves ingen tidligere erfaring. Elixir og Phoenix: Skalerbar backend-udvikling på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Ecto-schemas og databasemigrationer”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Elixir og Phoenix: Skalerbar backend-udvikling-lektion?
Ja. Alle Elixir og Phoenix: Skalerbar backend-udvikling-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Ecto-schemas og databasemigrationer
- Repo, Changesets og forespørgsler
- Relationer og indlejrede schemas
- Transaktioner og Ecto.Multi