Python Academy · Les

Modellen definiëren

Koppel klassen aan tabellen

Les 2 van 413 stappen

Modellen definiëren is een gratis Python Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.

Modellen worden aan tabellen gekoppeld

In de SQLAlchemy-ORM is een model een Python-klasse die aan een databasetabel wordt gekoppeld. Elke instantie wordt een rij.

Modellen erven van een gedeelde Base-klasse.

from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
    pass
print('Base class ready')

De __tablename__

Elk model stelt __tablename__ in om zijn tabel een naam te geven. SQLAlchemy gebruikt dit bij het genereren van SQL.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
print(User.__tablename__)

Kolommen met Mapped

Moderne SQLAlchemy definieert kolommen met typeaanduidingen: Mapped[int] en mapped_column(). De typeaanduiding stelt het Python-type in en geeft informatie over het kolomtype.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    age: Mapped[int]
print('User has id, name, age')

De primaire sleutel

Markeer een kolom als primaire sleutel met primary_key=True. Primaire sleutels van het type integer worden standaard automatisch verhoogd.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class Product(Base):
    __tablename__ = 'products'
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
print('id is the primary key')

Optionele kolommen

Gebruik Mapped[str | None] of Optional[str] om NULL-waarden toe te staan. Een gewone Mapped[str] is NOT NULL.

from typing import Optional
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    nickname: Mapped[Optional[str]]
print('nickname can be NULL')

Standaardwaarden en uniciteit

mapped_column() accepteert opties zoals unique=True en default= om beperkingen en terugvalwaarden toe te voegen.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str] = mapped_column(unique=True)
    active: Mapped[bool] = mapped_column(default=True)
print('email is unique, active defaults to True')

Tekenreekslengte

Stel voor databases die dit nodig hebben een tekenreekslengte in met mapped_column(String(50)).

from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(50))
print('name limited to 50 chars')

Het schema maken

Base.metadata.create_all(engine) maakt tabellen voor elk model dat van Base erft.

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Schema created')

Instanties maken

Maak een rij door het model te instantiëren als een normaal Python-object en kolomwaarden als benoemde argumenten door te geven.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
u = User(name='Alice')
print(u.name)

Een __repr__ toevoegen

Een aangepaste __repr__ maakt foutopsporing eenvoudiger doordat de gegevens van het object duidelijk worden weergegeven.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def __repr__(self):
        return 'User(name=' + self.name + ')'
print(repr(User(name='Bob')))

Modellen blijven gewone Python

Een model is nog steeds een gewone klasse. Je kunt methoden en eigenschappen toevoegen die met de gegevens ervan werken, zodat gedrag en blijvende opslag worden gecombineerd.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def greet(self):
        return 'Hi, ' + self.name
print(User(name='Carol').greet())

Korte controle

Test je vaardigheden in het definiëren van modellen.

Samenvatting

Je hebt geleerd hoe je ORM-modellen definieert.

  • Modellen erven van een DeclarativeBase en stellen __tablename__ in
  • Kolommen gebruiken Mapped[type] en mapped_column()
  • primary_key, unique en default voegen beperkingen toe
  • create_all() maakt de tabellen
Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
320

Veelgestelde vragen

Is de les “Modellen definiëren” gratis?

Ja — de volledige tekst van “Modellen definiëren” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.

Wat leer ik in “Modellen definiëren”?

Koppel klassen aan tabellen Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python Academy te beginnen?

Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Modellen definiëren”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python Academy?

Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. SQLAlchemy Core versus ORM
  2. Modellen definiëren
  3. Query's uitvoeren met de Session
  4. Relaties en joins
← Terug naar Python Academy