Definizione dei modelli
Mappare le classi alle tabelle
Definizione dei modelli è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 2 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.
I modelli corrispondono alle tabelle
Nell'ORM di SQLAlchemy, un model è una classe Python associata a una tabella del database. Ogni istanza diventa una riga.
I modelli ereditano da una classe Base condivisa.
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
print('Base class ready')__tablename__
Ogni modello imposta __tablename__ per assegnare un nome alla propria tabella. SQLAlchemy lo utilizza quando genera 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__)Colonne con Mapped
SQLAlchemy moderno dichiara le colonne con le annotazioni di tipo: Mapped[int] e mapped_column(). L'annotazione di tipo imposta il tipo Python e fornisce informazioni sul tipo della colonna.
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')La chiave primaria
Indichi una colonna come chiave primaria con primary_key=True. Le chiavi primarie intere vengono incrementate automaticamente per impostazione predefinita.
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')Colonne facoltative
Utilizzi Mapped[str | None] o Optional[str] per consentire valori NULL. Un semplice Mapped[str] equivale a 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')Valori predefiniti e unicità
mapped_column() accetta opzioni come unique=True e default= per aggiungere vincoli e valori alternativi.
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')Lunghezza delle stringhe
Per i database che lo richiedono, imposti la lunghezza di una stringa con 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')Creare lo schema
Base.metadata.create_all(engine) crea le tabelle per ogni modello che eredita da Base.
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')Creare istanze
Crei una riga istanziando il modello come un normale oggetto Python e passando i valori delle colonne come argomenti con nome.
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)Aggiungere __repr__
Un __repr__ personalizzato facilita il debugging mostrando chiaramente i dati dell'oggetto.
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')))I modelli restano semplici classi Python
Un modello è comunque una classe ordinaria. Può aggiungere metodi e proprietà che operano sui suoi dati, combinando comportamento e persistenza.
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())Verifica rapida
Verifichi le Sue competenze nella definizione dei modelli.
Riepilogo
Ha imparato a definire modelli ORM.
- I modelli ereditano da una
DeclarativeBasee impostano__tablename__ - Le colonne utilizzano
Mapped[type]emapped_column() primary_key,uniqueedefaultaggiungono vincolicreate_all()costruisce le tabelle
Domande Frequenti
La lezione «Definizione dei modelli» è gratuita?
Sì — il testo completo di «Definizione dei modelli» è 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 «Definizione dei modelli»?
Mappare le classi alle tabelle 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 2 di 4.
Quanto tempo richiede la lezione «Definizione dei modelli»?
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