Models

Models directory

  • The model is always placed in the models directory under the app directory
  • Namespaces , it will auto imported when app loaded package named {app name}.models

Model defintion

Also same the sqlalchemy's model class

SqlAlchemy Docs: SqlAlchemy 2.0

    from typing import List
    from typing import Optional
    from sqlalchemy import ForeignKey
    from sqlalchemy import String
    from sqlalchemy.orm import DeclarativeBase
    from sqlalchemy.orm import Mapped
    from sqlalchemy.orm import mapped_column
    from sqlalchemy.orm import relationship
    from irails.database import Base
    class User(Base):
        __tablename__ = "user_account"

        id: Mapped[int] = mapped_column(primary_key=True)
        name: Mapped[str] = mapped_column(String(30))
        fullname: Mapped[Optional[str]]

        addresses: Mapped[List["Address"]] = relationship(
            back_populates="user", cascade="all, delete-orphan"
        )

        def __repr__(self) -> str:
            return f"User(id={self.id!r}, name={self.name!r}, fullname={self.fullname!r})"
    class Address(Base):
        __tablename__ = "address"

        id: Mapped[int] = mapped_column(primary_key=True)
        email_address: Mapped[str]
        user_id: Mapped[int] = mapped_column(ForeignKey("user_account.id"))

        user: Mapped["User"] = relationship(back_populates="addresses")

        def __repr__(self) -> str:
            return f"Address(id={self.id!r}, email_address={self.email_address!r})"

How to use model

import "{app name}.models"
controllers file or services file or any where:
from app.models import User,Address
  • The design concept of irails, models are generally used in services