SQLAlchemy Core kontra ORM
Forstå de to lag
SQLAlchemy Core kontra ORM er en gratis Python Academy-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 Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad er SQLAlchemy?
SQLAlchemy er den mest populære Python-værktøjssamling til arbejde med relationsdatabaser. Den tilbyder to lag: Core og ORM.
Du installerer den med pip install sqlalchemy.
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)Motoren
Begge lag starter med en Engine, som oprettes med create_engine(). Den administrerer forbindelsespoolen og ved, hvordan den skal kommunikere med din specifikke database via en URL.
from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)De to lag
Core er en værktøjssamling til SQL-udtryk: Du opbygger forespørgsler, der ligger tæt på SQL.
ORM ligger oven på Core og knytter Python-klasser til tabeller, så du arbejder med objekter i stedet for rækker.
# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')Core: Definition af en tabel
I Core beskriver du tabeller eksplicit med objekterne 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: Opbygning af en forespørgsel
Core opbygger forespørgsler med Python-udtryk som select(), der oversættes 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 tilknyttet klasse
I ORM repræsenterer en Python-klasse en tabel. Hver attribut knyttes til en kolonne. Du forespørger efter og gemmer objekter, ikke rå rækker.
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__)Hvornår du skal bruge Core
Core passer, når du ønsker fin kontrol over den præcise SQL, skal behandle store datamængder eller køre komplekse rapporteringsforespørgsler, hvor objekter giver ekstra omkostninger.
# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')Hvornår du skal bruge ORM
ORM passer til typisk applikationskode: Du modellerer forretningsenheder som klasser, får ændringssporing 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 oven på Core, bruger begge den samme Engine og forbindelsespool. Du kan endda blande dem i den samme 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')Oprettelse af tabeller
Med ORM udfører Base.metadata.create_all(engine) CREATE TABLE-sætningerne for alle tilknyttede 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')Valg af lag
De fleste applikationer bruger som standard ORM til det daglige arbejde og skifter derefter til Core for den sjældne tunge eller fintunede forespørgsel. Når du kender begge, får du 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')Hurtig kontrol
Afprøv din forståelse af de to lag.
Opsummering
Du har fået kendskab til SQLAlchemys arkitektur.
Enginedriver alt viacreate_engine()- Core er en værktøjssamling til SQL-udtryk, der giver kontrol og ydeevne
- ORM knytter klasser til tabeller, så du kan skrive applikationskode effektivt
- Begge deler den samme motor og kan blandes
Lær Python 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
- 76
- Lektioner
- 320
Ofte stillede spørgsmål
Er lektionen “SQLAlchemy Core kontra ORM” gratis?
Ja — hele teksten til “SQLAlchemy Core kontra ORM” 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 Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “SQLAlchemy Core kontra ORM”?
Forstå de to lag Du øver dig i Python Academy 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å Python Academy?
Der kræves ingen tidligere erfaring. Python Academy 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 “SQLAlchemy Core kontra ORM”?
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 Python Academy-lektion?
Ja. Alle Python Academy-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
- SQLAlchemy Core kontra ORM
- Definition af modeller
- Forespørgsler med Session
- Relationer og joins