Definición de modelos
Asigne clases a tablas
Definición de modelos es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
Los modelos se asignan a tablas
En el ORM de SQLAlchemy, un modelo es una clase de Python que se asigna a una tabla de la base de datos. Cada instancia se convierte en una fila.
Los modelos heredan de una clase Base compartida.
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
print('Base class ready')El __tablename__
Cada modelo establece __tablename__ para nombrar su tabla. SQLAlchemy usa este valor al generar 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__)Columnas con Mapped
SQLAlchemy moderno declara las columnas con sugerencias de tipo: Mapped[int] y mapped_column(). La sugerencia de tipo establece el tipo de Python e informa del tipo de columna.
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 clave primaria
Marque una columna como clave primaria con primary_key=True. Las claves primarias enteras se incrementan automáticamente de forma predeterminada.
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')Columnas opcionales
Use Mapped[str | None] o Optional[str] para permitir valores NULL. Un Mapped[str] simple 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')Valores predeterminados y unicidad
mapped_column() acepta opciones como unique=True y default= para añadir restricciones y valores alternativos.
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')Longitud de las cadenas
Para las bases de datos que lo necesitan, establezca la longitud de una cadena 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')Crear el esquema
Base.metadata.create_all(engine) crea tablas para cada modelo que hereda de 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')Crear instancias
Cree una fila instanciando el modelo como un objeto normal de Python y pasando los valores de las columnas como argumentos con nombre.
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)Añadir un __repr__
Un __repr__ personalizado facilita la depuración al mostrar claramente los datos del objeto.
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')))Los modelos siguen siendo Python puro
Un modelo sigue siendo una clase normal. Puede añadir métodos y propiedades que operen sobre sus datos, combinando el comportamiento con la persistencia.
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())Comprobación rápida
Compruebe sus habilidades para definir modelos.
Resumen
Ha aprendido a definir modelos del ORM.
- Los modelos heredan de un
DeclarativeBasey establecen__tablename__ - Las columnas usan
Mapped[type]ymapped_column() primary_key,uniqueydefaultañaden restriccionescreate_all()crea las tablas
Preguntas frecuentes
¿La lección «Definición de modelos» es gratis?
Sí — el texto completo de «Definición de modelos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Definición de modelos»?
Asigne clases a tablas Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Definición de modelos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- SQLAlchemy Core frente a ORM
- Definición de modelos
- Consultas con Session
- Relaciones y uniones