Mapear customer con SQLAlchemy
Objetivos
Vas a describir unas pocas columnas de customer para leerlas desde Python sin copiar toda la tabla al modelo.
Concepto
ORM significa Object-Relational Mapping (mapeo objeto-relacional): conecta clases y objetos de Python con filas y tablas de una base relacional. Aquí la clase Customer representa la tabla customer; su clave primaria, customer_id, identifica cada fila sin confundir clientes con el mismo nombre.
Ejemplo
Instala SQLAlchemy con python -m pip install sqlalchemy y guarda el modelo en models.py:
from sqlalchemy import Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Customer(Base):
__tablename__ = "customer"
customer_id: Mapped[int] = mapped_column(Integer, primary_key=True)
first_name: Mapped[str] = mapped_column(String(45))
last_name: Mapped[str] = mapped_column(String(45))__tablename__ indica la tabla real; mapped_column asocia cada atributo con una columna y primary_key=True marca el identificador único. Los nombres coinciden con el esquema Sakila. El modelo solo describe cómo leer esas columnas: declararlo no crea ni modifica una tabla.
Nota
Regla del track: customer, payment y las demás tablas canónicas se tratan como solo lectura. Los ejercicios de escritura futuros usarán una tabla de práctica separada.
Práctica guiada
- Encuentra el atributo que declara el nombre real de la tabla.
- Señala la clave primaria.
- Comprueba que
first_nameylast_nameson columnas existentes en Sakila.
Reto
Agrega active al modelo usando un tipo entero y una anotación Mapped[int]. No agregues columnas que no existan en la base.
Quiz
¿Qué dato permite identificar un cliente de forma única?
- A.
first_name. - B.
customer_id. - C.
String(45).
Respuesta: B. customer_id es la clave primaria de customer.
Comprobación
Explica por qué este modelo pequeño no crea una tabla nueva. La siguiente lección usará una sesión para responder un endpoint de lectura.