# -*- coding: utf-8 -*- {% for model_import in model_import_list %} {{ model_import }} {% endfor %} from sqlalchemy.orm import Mapped, mapped_column from app.core.base_model import ModelMixin, UserMixin {% if table.sub and not is_sub_entity %} from ..{{ sub_module_name }}.model import {{ sub_model_class_name }} {% endif %} class {{ class_name }}Model(ModelMixin, UserMixin): """ {{ function_name }}表 """ __tablename__: str = '{{ table_name }}' __table_args__: dict[str, str] = {'comment': '{{ function_name }}'} {% if not is_sub_entity %} {% if pk_column and pk_column.column_name == 'id' %} {% set pk_sa_type = pk_column|get_sqlalchemy_type %} {% if pk_sa_type != 'Integer' %} # 表主键类型与基类 ModelMixin.id(Integer) 不一致,显式覆盖以保持模型与库结构一致 id: Mapped[{{ pk_column.python_type }}] = mapped_column({{ pk_sa_type }}, primary_key=True, {% if pk_column.is_increment %}autoincrement=True, {% endif %}index=True, nullable=False, comment='{{ pk_column.column_comment or "主键ID" }}') {% endif %} {% endif %} {% for column in columns %} {% if column.column_name not in ['id', 'uuid', 'tenant_id', 'created_time', 'updated_time', 'created_id', 'updated_id', 'is_deleted', 'deleted_time', 'deleted_id'] %} {% set sqlalchemy_type = column|get_sqlalchemy_type %} {% if not column.is_nullable %} {{ column.column_name }}: Mapped[{{ column.python_type }}] = mapped_column({{ sqlalchemy_type }}, {% if column.is_pk %}primary_key=True, {% endif %}{% if column.is_increment %}autoincrement=True, {% endif %}nullable=False, comment='{{ column.column_comment }}') {% else %} {{ column.column_name }}: Mapped[{{ column.python_type }} | None] = mapped_column({{ sqlalchemy_type }}, {% if column.is_pk %}primary_key=True, {% endif %}{% if column.is_increment %}autoincrement=True, {% endif %}nullable=True, comment='{{ column.column_comment }}') {% endif %} {% endif %} {% endfor %} {% if table.sub %} {{ sub_rel_list_name }} = relationship('{{ sub_model_class_name }}', back_populates='{{ parent_rel_name }}') {% endif %} {% else %} {% if pk_column and pk_column.column_name == 'id' %} {% set pk_sa_type = pk_column|get_sqlalchemy_type %} {% if pk_sa_type != 'Integer' %} # 子表主键类型与基类 ModelMixin.id(Integer) 不一致,显式覆盖以保持模型与库结构一致 id: Mapped[{{ pk_column.python_type }}] = mapped_column({{ pk_sa_type }}, primary_key=True, {% if pk_column.is_increment %}autoincrement=True, {% endif %}index=True, nullable=False, comment='{{ pk_column.column_comment or "主键ID" }}') {% endif %} {% endif %} {% for column in columns %} {% if column.column_name not in ['id', 'uuid', 'tenant_id', 'created_time', 'updated_time', 'created_id', 'updated_id', 'is_deleted', 'deleted_time', 'deleted_id'] %} {% set sqlalchemy_type = column|get_sqlalchemy_type %} {% if column.column_name == sub_table_fk_name %} {{ column.column_name }}: Mapped[{{ column.python_type }}{% if column.is_nullable and not column.is_pk %} | None{% endif %}] = mapped_column({{ sqlalchemy_type }}, ForeignKey('{{ parent_table_name }}.{{ parent_pk_column_name }}', ondelete='CASCADE'), {% if column.is_pk %}primary_key=True, {% endif %}{% if column.is_increment %}autoincrement=True, {% endif %}{% if (not column.is_nullable) or column.is_pk %}nullable=False{% else %}nullable=True{% endif %}, comment='{{ column.column_comment }}') {% else %} {% if not column.is_nullable %} {{ column.column_name }}: Mapped[{{ column.python_type }}] = mapped_column({{ sqlalchemy_type }}, {% if column.is_pk %}primary_key=True, {% endif %}{% if column.is_increment %}autoincrement=True, {% endif %}nullable=False, comment='{{ column.column_comment }}') {% else %} {{ column.column_name }}: Mapped[{{ column.python_type }} | None] = mapped_column({{ sqlalchemy_type }}, {% if column.is_pk %}primary_key=True, {% endif %}{% if column.is_increment %}autoincrement=True, {% endif %}nullable=True, comment='{{ column.column_comment }}') {% endif %} {% endif %} {% endif %} {% endfor %} {{ parent_rel_name }} = relationship('{{ parent_model_class_name }}', back_populates='{{ parent_list_rel_name }}') {% endif %}