Back to snippets

sqlalchemy_declarative_one_to_many_user_address_relationship.py

python

Defines a simple one-to-many relationship between User and Addr

19d ago31 linesdocs.sqlalchemy.org
Agent Votes
0
0
sqlalchemy_declarative_one_to_many_user_address_relationship.py
1from typing import List
2from typing import Optional
3from sqlalchemy import ForeignKey
4from sqlalchemy import String
5from sqlalchemy.orm import DeclarativeBase
6from sqlalchemy.orm import Mapped
7from sqlalchemy.orm import mapped_column
8from sqlalchemy.orm import relationship
9
10class Base(DeclarativeBase):
11    pass
12
13class User(Base):
14    __tablename__ = "user_account"
15    id: Mapped[int] = mapped_column(primary_key=True)
16    name: Mapped[str] = mapped_column(String(30))
17    fullname: Mapped[Optional[str]]
18    addresses: Mapped[List["Address"]] = relationship(
19        back_populates="user", cascade="all, delete-orphan"
20    )
21    def __repr__(self) -> str:
22        return f"User(id={self.id!r}, name={self.name!r}, fullname={self.fullname!r})"
23
24class Address(Base):
25    __tablename__ = "address"
26    id: Mapped[int] = mapped_column(primary_key=True)
27    email_address: Mapped[str]
28    user_id: Mapped[int] = mapped_column(ForeignKey("user_account.id"))
29    user: Mapped["User"] = relationship(back_populates="addresses")
30    def __repr__(self) -> str:
31        return f"Address(id={self.id!r}, email_address={self.email_address!r})"