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
ForeignKeyes la columna;relationshipes el atributo.back_populatesmantiene los dos lados sincronizados.- Agregar a la colección define la clave por ti.
Palabras clave y builtins usados aquí
asclassidintlenlistpassprintstrwith
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.
Paso 5 de 5 en SQLAlchemy; paso 17 de 19 en Servicios web y acceso a datos.