Skip to content

数据模型(Model)

数据模型是模块开发的第一步,用于定义数据库表结构。项目使用 SQLAlchemy ORM,模型类通过继承 BaseModel 自动获得通用字段和方法。

文件位置

src/modules/link/models.py

完整代码

python
# +======================================================================
# | 模块: 友链数据模型层
# | 说明: 定义友链表结构,继承 BaseModel 获得通用字段与序列化能力
# +======================================================================
"""友链数据模型。"""

from sqlalchemy import Column, Integer, String, text

from config.database import DB_PREFIX
from core.base_model import BaseModel


class Link(BaseModel):
    """友情链接模型"""
    __tablename__ = DB_PREFIX + "link"
    __table_args__ = {"comment": "友情链接表"}

    # 链接名称
    name = Column(String(255), nullable=False, index=True, comment="链接名称")
    # 链接类型
    type = Column(String(50), default="", comment="链接类型")
    # 链接来源
    form = Column(String(50), default="", comment="链接来源")
    # 链接图片
    image = Column(String(500), default="", comment="链接图片")
    # 链接地址
    url = Column(String(500), default="", comment="链接地址")
    # 状态:0-正常 1-停用
    status = Column(Integer, default=0, server_default=text("0"), comment="状态")
    # 排序
    sort = Column(Integer, default=0, server_default=text("0"), comment="排序")

代码解析

基类继承

python
class Link(BaseModel):
基类来源提供能力
BaseModelcore/base_model.py通用字段:id、create_user、create_time、update_user、update_time、is_delete;to_dict() 序列化方法(自动排除 password/salt/is_delete)

BaseModel 说明

BaseModel 是所有业务模型的基类,提供6个通用审计字段和 to_dict() 序列化方法。模型实例不暴露 save()/delete() 方法,数据操作通过 Repository 层进行。

表名配置

python
__tablename__ = DB_PREFIX + "link"

DB_PREFIX.env 读取(默认 tornado_),最终表名为 tornado_link。所有业务表都使用此前缀,便于区分不同应用的同库表。

表注释

python
__table_args__ = {"comment": "友情链接表"}

使用 __table_args 字典设置表注释,同步到数据库元数据。

字段定义

python
name = Column(String(255), nullable=False, index=True, comment="链接名称")
参数说明
String(255)字段类型,VARCHAR(255)
nullable=False非空约束
index=True创建索引,加速查询
comment字段注释,同步到数据库
python
status = Column(Integer, default=0, server_default=text("0"), comment="状态")

default=0 是 Python 端默认值,server_default=text("0") 是数据库端默认值。两者都设置可确保无论通过 ORM 还是直接 SQL 插入,都能正确赋默认值。

枚举值约定

状态字段使用 01 而非 12

字段含义
status0正常
status1停用
is_delete0未删除
is_delete1已删除

开发要点

  1. 所有模型继承 BaseModel:自动获得通用字段和序列化能力
  2. 表名必须加 DB_PREFIX 前缀DB_PREFIX + "表名"
  3. 使用 __table_args__ 设置表注释:字典格式 {"comment": "表注释"}
  4. 查询频繁的字段设置索引index=True
  5. 同时设置 defaultserver_default:ORM 和直 SQL 都能正确赋默认值
  6. 模型不暴露 save/delete 方法:数据操作通过 Repository 层进行

总结

数据模型通过继承 BaseModel 获得通用审计字段和序列化能力。表名使用 DB_PREFIX 前缀,字段定义同时设置 Python 端和数据库端默认值。模型只定义表结构,不包含业务逻辑。

小蚂蚁云团队 · 提供技术支持