- golden-examples/todo/: 6/6 PASS referenssitoteutus - SQLAlchemy 2.0 (DeclarativeBase, Mapped, mapped_column) - Pydantic v2 (ConfigDict) - PEP 621 pyproject.toml, Python >=3.14 - Uniikki testidata per testi - CODE_SYSTEM päivitetty: few-shot kultaisesta esimerkistä - DOCUMENTATION.md: zensical-dokumentointiohjeet
31 lines
1015 B
Python
31 lines
1015 B
Python
"""Tietokantamallit — SQLAlchemy 2.0, Mapped-tyypitys, SQLite."""
|
|
|
|
from datetime import date
|
|
|
|
from sqlalchemy import String, Text, Date, create_engine
|
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker
|
|
|
|
DATABASE_URL = "sqlite:///./app.db"
|
|
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
|
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
|
|
|
|
|
class Base(DeclarativeBase):
|
|
pass
|
|
|
|
|
|
class Todo(Base):
|
|
"""Tehtävä — otsikko, kuvaus, deadline, prioriteetti ja status."""
|
|
|
|
__tablename__ = "todos"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True)
|
|
title: Mapped[str] = mapped_column(String(255))
|
|
description: Mapped[str | None] = mapped_column(Text, default=None)
|
|
due_date: Mapped[date | None] = mapped_column(Date, default=None)
|
|
priority: Mapped[int] = mapped_column(default=1)
|
|
status: Mapped[str] = mapped_column(String(20), default="pending")
|
|
|
|
|
|
Base.metadata.create_all(bind=engine)
|