SQLAlchemy Core e ORM a confronto
Comprendere i due livelli
SQLAlchemy Core e ORM a confronto è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Che cos'è SQLAlchemy
SQLAlchemy è il toolkit Python più diffuso per lavorare con i database relazionali. Offre due livelli: Core e ORM.
Lo installa con pip install sqlalchemy.
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
print('Engine:', engine)Engine
Entrambi i livelli iniziano con un Engine, creato da create_engine(). Gestisce il pool di connessioni e sa come comunicare con il database specifico tramite un URL.
from sqlalchemy import create_engine
engine = create_engine('sqlite:///app.db')
print('Dialect:', engine.dialect.name)I due livelli
Core è un toolkit per le espressioni SQL: costruisce query che corrispondono strettamente a SQL.
L'ORM si basa su Core e associa le classi Python alle tabelle, consentendo di lavorare con oggetti anziché con righe.
# Core: think in tables and SQL expressions
# ORM: think in Python classes and objects
print('Core = SQL toolkit, ORM = object mapping')Core: definire una tabella
In Core descrive esplicitamente le tabelle con gli oggetti Table e 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: costruire una query
Core costruisce le query con espressioni Python come select(), che vengono tradotte direttamente in 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: una classe mappata
Nell'ORM, una classe Python rappresenta una tabella. Ogni attributo corrisponde a una colonna. Le query e il salvataggio riguardano gli oggetti, non le righe grezze.
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__)Quando utilizzare Core
Core è adatto quando desidera un controllo preciso sull'SQL generato, deve elaborare grandi quantità di dati oppure eseguire query complesse per i report, nelle quali gli oggetti aggiungerebbero un sovraccarico.
# Core is great for:
# - bulk inserts/updates
# - complex analytical queries
# - close control over generated SQL
print('Core: control and performance')Quando utilizzare l'ORM
L'ORM è adatto al normale codice applicativo: modella le entità aziendali come classi, offre il rilevamento delle modifiche e richiede meno codice ripetitivo.
# ORM is great for:
# - application domain models
# - automatic change tracking
# - relationships between objects
print('ORM: productivity and clarity')Condividono lo stesso Engine
Poiché l'ORM è costruito su Core, entrambi utilizzano lo stesso Engine e lo stesso pool di connessioni. Può persino combinarli nella stessa applicazione.
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')Creare le tabelle
Con l'ORM, Base.metadata.create_all(engine) emette le istruzioni CREATE TABLE per tutte le classi mappate.
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')Scegliere un livello
Per il lavoro quotidiano, la maggior parte delle applicazioni utilizza l'ORM come impostazione predefinita, ricorrendo a Core per le rare query pesanti o fortemente ottimizzate. Conoscere entrambi offre maggiore flessibilità.
# Rule of thumb:
# Start with the ORM. Use Core where you need raw power.
print('Default ORM, escape to Core when needed')Verifica rapida
Verifichi la Sua comprensione dei due livelli.
Riepilogo
Ha conosciuto l'architettura di SQLAlchemy.
Enginecostituisce la base di tutto tramitecreate_engine()- Core è un toolkit per le espressioni SQL che offre controllo e prestazioni
- ORM associa le classi alle tabelle per scrivere in modo produttivo il codice applicativo
- Entrambi condividono lo stesso engine e possono essere combinati
Domande Frequenti
La lezione «SQLAlchemy Core e ORM a confronto» è gratuita?
Sì — il testo completo di «SQLAlchemy Core e ORM a confronto» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «SQLAlchemy Core e ORM a confronto»?
Comprendere i due livelli Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «SQLAlchemy Core e ORM a confronto»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- SQLAlchemy Core e ORM a confronto
- Definizione dei modelli
- Query con la Session
- Relazioni e join