Python Academy · Lektion

SQLAlchemy Core kontra ORM

Förstå de två lagren

Lektion 1 av 413 steg

SQLAlchemy Core kontra ORM är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad är SQLAlchemy?

SQLAlchemy är det populäraste Python-verktyget för att arbeta med relationsdatabaser. Det erbjuder två lager: Core och ORM.

Du installerar det med pip install sqlalchemy.

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

Motorn

Båda lagren börjar med en Engine, som skapas med create_engine(). Den hanterar anslutningspoolen och vet hur den ska kommunicera med just din databas via en URL.

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

De två lagren

Core är ett verktyg för SQL-uttryck: du bygger frågor som ligger nära SQL.

ORM ligger ovanpå Core och mappar Python-klasser till tabeller, så att du arbetar med objekt i stället för rader.

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

Core: definiera en tabell

I Core beskriver du tabeller uttryckligen med objekten Table och 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: bygga en fråga

Core bygger frågor med Python-uttryck som select(), vilka översätts direkt till 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 mappad klass

I ORM representerar en Python-klass en tabell. Varje attribut motsvarar en kolumn. Du frågar efter och sparar objekt i stället för råa 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 ska Core användas?

Core passar när du vill ha detaljerad kontroll över den exakta SQL-koden, arbeta med stora datamängder eller köra komplexa rapportfrågor där objekt medför extra kostnader.

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

När ska ORM användas?

ORM passar för typisk applikationskod: du modellerar verksamhetens entiteter som klasser, får ändringsspårning och behöver skriva mindre standardkod.

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

De delar Engine

Eftersom ORM bygger på Core använder båda samma Engine och anslutningspool. Du kan till och med blanda dem i samma applikation.

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')

Skapa tabeller

Med ORM utfärdar Base.metadata.create_all(engine) CREATE TABLE-satserna för alla mappade 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')

Välja ett lager

De flesta appar använder ORM som standard i det dagliga arbetet och går sedan över till Core för sällsynta, tunga eller mycket optimerade frågor. Om du kan båda får du större flexibilitet.

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

Snabbtest

Testa din förståelse av de två lagren.

Sammanfattning

Du har bekantat dig med SQLAlchemys arkitektur.

  • Engine driver allt via create_engine()
  • Core är ett verktyg för SQL-uttryck som ger kontroll och prestanda
  • ORM mappar klasser till tabeller för effektiv applikationskod
  • Båda delar samma engine och kan blandas
Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”SQLAlchemy Core kontra ORM” gratis?

Ja – hela texten till ”SQLAlchemy Core kontra ORM” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”SQLAlchemy Core kontra ORM”?

Förstå de två lagren Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”SQLAlchemy Core kontra ORM”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. SQLAlchemy Core kontra ORM
  2. Definiera modeller
  3. Fråga med Session
  4. Relationer och joiner
← Tillbaka till Python Academy