select en Python
La API de consultas 2.0: arma un select, ejecútalo, lee escalares o filas.
from sqlalchemy import create_engine, func, select
from sqlalchemy.orm import DeclarativeBase, Mapped, Session, mapped_column
class Base(DeclarativeBase):
pass
class Run(Base):
__tablename__ = "runs"
id: Mapped[int] = mapped_column(primary_key=True)
lang: Mapped[str]
tpm: Mapped[float]
motor = create_engine("sqlite+pysqlite:///:memory:")
Base.metadata.create_all(motor)
with Session(motor) as sesion:
sesion.add_all([Run(lang="python", tpm=104.0),
Run(lang="python", tpm=91.0),
Run(lang="rust", tpm=98.0)])
sesion.commit()
rapidos = sesion.scalars(
select(Run).where(Run.tpm > 95).order_by(Run.tpm.desc())).all()
print([(r.lang, r.tpm) for r in rapidos])
por_lang = sesion.execute(
select(Run.lang, func.avg(Run.tpm)).group_by(Run.lang)).all()
print([(lang, round(prom, 1)) for lang, prom in por_lang])
Cómo funciona
select(Model)devuelve objetos completos.where,order_byylimitse encadenan encima.scalars()desenvuelve las filas de una sola columna.
Palabras clave y builtins usados aquí
asclassfloatforidintpassprintroundstrwith
El intento, en números
- Líneas
- 31
- Caracteres a escribir
- 813
- Tokens
- 244
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 133 segundos.
Paso 4 de 5 en SQLAlchemy; paso 16 de 19 en Servicios web y acceso a datos.