0Pricing
Python Academy · Lezione

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 DeclarativeBase e impostano __tablename__
  • Le colonne utilizzano Mapped[type] e mapped_column()
  • primary_key, unique e default aggiungono vincoli
  • create_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

  1. SQLAlchemy Core e ORM a confronto
  2. Definizione dei modelli
  3. Query con la Session
  4. Relazioni e join
← Torna a Python Academy