typestar

Relaciones en Python

Una clave foránea más relationship te da objetos en ambos lados.

from sqlalchemy import ForeignKey, create_engine
from sqlalchemy.orm import (DeclarativeBase, Mapped, Session, mapped_column,
                            relationship)


class Base(DeclarativeBase):
    pass


class Tour(Base):
    __tablename__ = "tours"
    id: Mapped[int] = mapped_column(primary_key=True)
    slug: Mapped[str]
    steps: Mapped[list["Paso"]] = relationship(back_populates="tour")


class Paso(Base):
    __tablename__ = "pasos"
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    tour_id: Mapped[int] = mapped_column(ForeignKey("tours.id"))
    tour: Mapped[Tour] = relationship(back_populates="steps")


motor = create_engine("sqlite+pysqlite:///:memory:")
Base.metadata.create_all(motor)

with Session(motor) as sesion:
    tour = Tour(slug="basics")
    tour.steps = [Paso(title="Variables"), Paso(title="Cadenas")]
    sesion.add(tour)
    sesion.commit()
    print(len(tour.steps), tour.steps[0].tour.slug)

Cómo funciona

  1. ForeignKey es la columna; relationship es el atributo.
  2. back_populates mantiene los dos lados sincronizados.
  3. Agregar a la colección define la clave por ti.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
33
Caracteres a escribir
874
Tokens
228
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 124 segundos.

Escribe este fragmento

Paso 5 de 5 en SQLAlchemy; paso 17 de 19 en Servicios web y acceso a datos.

← Anterior Siguiente →