跳转至

model

数据库模型


模型

class 名称(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    age: Optional[int] = None
备注

table=False 是否 在数据库中创建表

字段
    # 主键
    字段: Optional[int] = Field(default=None, primary_key=True)

    # 可选可空
    字段: Optional[int] = None
参数
# 是否 添加索引
index=False

# 默认值 如果是None则可为空
default=None,

一对多关系

一对多

字段: Optional[int] = Field(default=None, foreign_key='表.主键')

可用于主键

名称2: List["外键SQLModel"] = Relationship(back_populates="名称3")
备注

名称2=[外键实例, 外键实例] 创建主键实例 或 修改主键实例 可以通过主键来创建外键关系

主键实例.名称2.append(外键实例) 可以通过主键实例来创建外键关系

可以直接以主键实例访问外键列表 主键SQLModel实例.名称2

可用于外键

名称3: Optional[主键SQLModel] = Relationship(back_populates="名称2")
备注

创建实例时可以只传 主键实例 而不是 主键实例.id

可以直接以外键实例访问主键属性 外键SQLModel实例.名称3

删除关系 外键SQLModel实例.名称3 = None


多对多关系

# 链接表
class HeroTeamLink(SQLModel, table=True):
    team_id: Optional[int] = Field(
        default=None, foreign_key="team.id", primary_key=True
    )
    hero_id: Optional[int] = Field(
        default=None, foreign_key="hero.id", primary_key=True
    )

class Team(SQLModel, table=True):
    # 字段

    heroes: List["Hero"] = Relationship(back_populates="teams", link_model=HeroTeamLink)

class Hero(SQLModel, table=True):
    # 字段

    teams: List[Team] = Relationship(back_populates="heroes", link_model=HeroTeamLink)

创建多对多关系的数据

hero_deadpond = Hero(
    字段="值",
    字段2="值",
    teams=[Team实例, Team实例],
)

新增多对多

Team实例.heroes.append(hero_deadpond)

删除多对多

hero_deadpond.teams.remove(Team实例)

多对多关系 额外字段

class HeroTeamLink(SQLModel, table=True):
    team_id: Optional[int] = Field(
        default=None, foreign_key="team.id", primary_key=True
    )
    hero_id: Optional[int] = Field(
        default=None, foreign_key="hero.id", primary_key=True
    )
    # 额外字段
    is_training: bool = False

    # 额外设置
    team: "Team" = Relationship(back_populates="hero_links")
    hero: "Hero" = Relationship(back_populates="team_links")


class Team(SQLModel, table=True):
    # 字段

    hero_links: List[HeroTeamLink] = Relationship(back_populates="team")


class Hero(SQLModel, table=True):
    #字段

    team_links: List[HeroTeamLink] = Relationship(back_populates="hero")

创建关系

deadpond_preventers_link = HeroTeamLink(team=Team实例, hero=Hero实例, is_training=True)

不知道啥玩意

不知道啥玩意 创建关系可能是 需要提交 Team实例

Team实例.hero_links.append(deadpond_preventers_link)

仅在编辑代码时运行

方便 IDE 提示

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from .hero_model import Hero

字段校验

@root_validator
def create_use(cls, values):
    values["username"]  # 获取值
    values["username"] =   # 更改值
    # 抛出异常 暂时不知道怎么做
    return values

property

字段定义与关联

# 用户
class UserBase(SQLModel):
    pass

class User(UserBase, table=True):
    pass
    @property
    def difference(self):
        x = len(self.posts)
        print(x)
        return '1212111'

class UserRead(UserBase):
    difference: str