Python Academy · leksjon

SQLAlchemy Core kontra ORM

Forstå de to lagene

Leksjon 1 av 413 trinn

SQLAlchemy Core kontra ORM er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva er SQLAlchemy?

SQLAlchemy er det mest populære Python-verktøysettet for arbeid med relasjonsdatabaser. Det tilbyr to lag: Core og ORM.

Det installeres med pip install sqlalchemy.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)

Engine

Begge lagene starter med en Engine, som opprettes av create_engine(). Den administrerer tilkoblingspoolen og vet hvordan den skal kommunisere med den aktuelle databasen via en URL.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)

De to lagene

Core er et verktøysett for SQL-uttrykk: De bygger spørringer som ligger tett opp mot SQL.

ORM bygger oppå Core og mapper Python-klasser til tabeller, slik at De arbeider med objekter i stedet for rader.

# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')

Core: Definere en tabell

I Core beskriver De tabeller eksplisitt med objektene Table og MetaData.

from sqlalchemy import MetaData, Table, Column, Integer, String
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
print('Table defined:', users.name)

Core: Bygge en spørring

Core bygger spørringer med Python-uttrykk som select(), som oversettes direkte til SQL.

from sqlalchemy import MetaData, Table, Column, Integer, String, select
metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String))
stmt = select(users).where(users.c.name == 'Alice')
print(stmt)

ORM: En mappet klasse

I ORM representerer en Python-klasse en tabell. Hvert attributt kobles til en kolonne. De spør etter og lagrer objekter, ikke rå rader.

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]
print('Mapped class:', User.__tablename__)

Når Core bør brukes

Core passer når De ønsker fin kontroll over den nøyaktige SQL-en, skal utføre massebehandling av data eller kjøre komplekse rapportspørringer der objekter medfører ekstra kostnader.

# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')

Når ORM bør brukes

ORM passer til typisk applikasjonskode: De modellerer forretningsenheter som klasser, får endringssporing og skriver mindre standardkode.

# ORM is great for:
# - application domain models
# - automatic change tracking
# - relationships between objects
print('ORM: productivity and clarity')

De deler Engine

Fordi ORM er bygget oppå Core, bruker begge samme Engine og tilkoblingspool. De kan til og med kombineres i én applikasjon.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
# Core uses engine.connect()
# ORM uses a Session bound to the same engine
print('One engine powers both layers')

Opprette tabeller

Med ORM utfører Base.metadata.create_all(engine) CREATE TABLE-setningene for alle mappede klasser.

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)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Tables created')

Velge et lag

De fleste applikasjoner bruker ORM som standard til daglig arbeid og går over til Core for sjeldne, tunge eller svært optimaliserte spørringer. Når De kjenner begge, får De større fleksibilitet.

# Rule of thumb:
# Start with the ORM. Use Core where you need raw power.
print('Default ORM, escape to Core when needed')

Hurtigtest

Test forståelsen Deres av de to lagene.

Oppsummering

De har blitt kjent med arkitekturen i SQLAlchemy.

  • Engine driver alt via create_engine()
  • Core er et verktøysett for SQL-uttrykk som gir kontroll og ytelse
  • ORM mapper klasser til tabeller for effektiv applikasjonskode
  • Begge deler samme engine og kan kombineres
Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «SQLAlchemy Core kontra ORM» gratis?

Ja – hele teksten i «SQLAlchemy Core kontra ORM» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «SQLAlchemy Core kontra ORM»?

Forstå de to lagene Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «SQLAlchemy Core kontra ORM»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. SQLAlchemy Core kontra ORM
  2. Definere modeller
  3. Spørringer med Session
  4. Relasjoner og joins
← Tilbake til Python Academy