From: Mike Fiedler Date: Fri, 25 Oct 2024 20:22:48 +0000 (-0700) Subject: refactor: update proxied_association to declarative X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c23c9d49017c4bb14bf71827d5f61cb3e18807e4;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git refactor: update proxied_association to declarative Signed-off-by: Mike Fiedler --- diff --git a/examples/association/proxied_association.py b/examples/association/proxied_association.py index 65dcd6c0b6..e3c022aba1 100644 --- a/examples/association/proxied_association.py +++ b/examples/association/proxied_association.py @@ -5,64 +5,72 @@ to ``OrderItem`` optional. """ +from __future__ import annotations + from datetime import datetime -from sqlalchemy import Column from sqlalchemy import create_engine -from sqlalchemy import DateTime -from sqlalchemy import Float from sqlalchemy import ForeignKey -from sqlalchemy import Integer from sqlalchemy import String from sqlalchemy.ext.associationproxy import association_proxy -from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.ext.associationproxy import AssociationProxy +from sqlalchemy.orm import DeclarativeBase +from sqlalchemy.orm import Mapped +from sqlalchemy.orm import mapped_column from sqlalchemy.orm import relationship from sqlalchemy.orm import Session -Base = declarative_base() +class Base(DeclarativeBase): + pass class Order(Base): __tablename__ = "order" - order_id = Column(Integer, primary_key=True) - customer_name = Column(String(30), nullable=False) - order_date = Column(DateTime, nullable=False, default=datetime.now()) - order_items = relationship( - "OrderItem", cascade="all, delete-orphan", backref="order" + order_id: Mapped[int] = mapped_column(primary_key=True) + customer_name: Mapped[str] = mapped_column(String(30)) + order_date: Mapped[datetime] = mapped_column(default=datetime.now()) + order_items: Mapped[list[OrderItem]] = relationship( + cascade="all, delete-orphan", backref="order" + ) + items: AssociationProxy[list[Item]] = association_proxy( + "order_items", "item" ) - items = association_proxy("order_items", "item") - def __init__(self, customer_name): + def __init__(self, customer_name: str) -> None: self.customer_name = customer_name class Item(Base): __tablename__ = "item" - item_id = Column(Integer, primary_key=True) - description = Column(String(30), nullable=False) - price = Column(Float, nullable=False) + item_id: Mapped[int] = mapped_column(primary_key=True) + description: Mapped[str] = mapped_column(String(30)) + price: Mapped[float] - def __init__(self, description, price): + def __init__(self, description: str, price: float) -> None: self.description = description self.price = price - def __repr__(self): - return "Item(%r, %r)" % (self.description, self.price) + def __repr__(self) -> str: + return "Item({!r}, {!r})".format(self.description, self.price) class OrderItem(Base): __tablename__ = "orderitem" - order_id = Column(Integer, ForeignKey("order.order_id"), primary_key=True) - item_id = Column(Integer, ForeignKey("item.item_id"), primary_key=True) - price = Column(Float, nullable=False) + order_id: Mapped[int] = mapped_column( + ForeignKey("order.order_id"), primary_key=True + ) + item_id: Mapped[int] = mapped_column( + ForeignKey("item.item_id"), primary_key=True + ) + price: Mapped[float] - def __init__(self, item, price=None): + def __init__(self, item: Item, price: float | None = None): self.item = item self.price = price or item.price - item = relationship(Item, lazy="joined") + item: Mapped[Item] = relationship(lazy="joined") if __name__ == "__main__":