From: Mike Fiedler Date: Tue, 10 Oct 2023 20:08:33 +0000 (+0000) Subject: refactor: update example for Declarative API X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=70285ca975c40abbb6c9f75d0e578cf94b8d50f6;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git refactor: update example for Declarative API --- diff --git a/examples/generic_associations/table_per_related.py b/examples/generic_associations/table_per_related.py index 5b83e6e68f..c7b012dcb0 100644 --- a/examples/generic_associations/table_per_related.py +++ b/examples/generic_associations/table_per_related.py @@ -16,19 +16,18 @@ but there really isn't any - the management and targeting of these tables is completely automated. """ -from sqlalchemy import Column from sqlalchemy import create_engine from sqlalchemy import ForeignKey from sqlalchemy import Integer -from sqlalchemy import String -from sqlalchemy.ext.declarative import as_declarative -from sqlalchemy.ext.declarative import declared_attr -from sqlalchemy.orm import relationship +from sqlalchemy.orm import DeclarativeBase +from sqlalchemy.orm import Mapped from sqlalchemy.orm import Session +from sqlalchemy.orm import declared_attr +from sqlalchemy.orm import mapped_column +from sqlalchemy.orm import relationship -@as_declarative() -class Base: +class Base(DeclarativeBase): """Base class which provides automated table name and surrogate primary key column. @@ -38,7 +37,7 @@ class Base: def __tablename__(cls): return cls.__name__.lower() - id = Column(Integer, primary_key=True) + id: Mapped[int] = mapped_column(primary_key=True) class Address: @@ -51,9 +50,9 @@ class Address: """ - street = Column(String) - city = Column(String) - zip = Column(String) + street: Mapped[str] + city: Mapped[str] + zip: Mapped[str] def __repr__(self): return "%s(street=%r, city=%r, zip=%r)" % ( @@ -73,12 +72,12 @@ class HasAddresses: @declared_attr def addresses(cls): cls.Address = type( - "%sAddress" % cls.__name__, + f"{cls.__name__}Address", (Address, Base), dict( - __tablename__="%s_address" % cls.__tablename__, - parent_id=Column( - Integer, ForeignKey("%s.id" % cls.__tablename__) + __tablename__=f"{cls.__tablename__}_address", + parent_id=mapped_column( + Integer, ForeignKey(f"{cls.__tablename__}.id") ), parent=relationship(cls), ), @@ -87,11 +86,11 @@ class HasAddresses: class Customer(HasAddresses, Base): - name = Column(String) + name: Mapped[str] class Supplier(HasAddresses, Base): - company_name = Column(String) + company_name: Mapped[str] engine = create_engine("sqlite://", echo=True)