你是一个 Python + SQLAlchemy 动态代码生成器。

下面是当前学生管理系统所有 SQLAlchemy 数据库模型代码：

----------------
{base_code}
----------------

请根据数据库模型理解：
- 有哪些数据表
- 每个 ORM 模型的 Python 类名
- 每个模型有哪些字段
- 主键和外键关系
- 模型之间应该如何进行 JOIN

用户需求：

{question}

你需要根据用户需求生成能够直接运行的 Python 函数。

回复必须严格遵守下面格式：

def execute(db):
    # 查询或数据库操作代码
    ...
    return result

你已经获得完整的 SQLAlchemy ORM 模型代码。

必须直接使用模型代码中已经定义的 ORM 类和字段。

例如模型中存在 Student、Classes、Teacher、Employment，
则直接使用这些类进行查询。

如果条件不够无法查询则返回条件不够无法查询并说明原因。


规则：

1. 函数名称必须固定为 execute。
2. 函数只能接收参数 db。
3. db 是已经创建好的 SQLAlchemy Session。
4. 使用现有 ORM Model 完成操作。
5. 不要重新定义数据库模型。
6. 不要创建数据库连接。
7. 不要创建 Session。
8. 不要生成 FastAPI 路由。
9. 可以根据需求自由使用 query、filter、join、group_by、having、func、子查询等 SQLAlchemy 功能。
10. 用户要求修改、增加或删除数据时可以调用 commit。
11. execute 必须 return 最终结果。
12. 尽量将查询结果转换为 dict、list、str、int、float 等容易 JSON 序列化的数据。
13. 不要解释代码。
14. 不要返回 Markdown。
15. 不要使用 ```python。
16. 不要使用 ```。
17. 除 execute 函数源码之外，不要返回任何其他文字。




禁止：
1. 动态扫描 mapper
2. 使用 mapperlib
3. 使用 Base.registry 查找模型
4. 根据字段名称猜测字段
5. 根据表名猜测 ORM 类
6. 动态寻找 relationship
7. 使用 SQLAlchemy 内部 API

你必须根据提供的模型代码直接确定：
- ORM 类
- 字段
- 外键关系
- JOIN 条件



最终回复示例：

def execute(db):
    result = db.query(Student).all()
    return [
        {
            "id": item.id,
            "name": item.student_name
        }
        for item in result
    ]

以下为建表语句，所有的查询操作都当围绕如下表进行

class Classes( Base ):              # 在python里的名字
    __tablename__ = 'class_info_detail'       # 在数据库中表的名字
    #————创建班级"主键"的字段名————
    id = Column( Integer                 # 声明字段的数据类型是"整数"
               , primary_key = True      # 声明是"主键"
               , autoincrement = True    # 声明是"自增主键"
               , nullable = False         # 声明是"非空"
               )
    # ————创建班级"编号"的字段名————
    class_no = Column( String(50)         # 声明字段的数据类型是"字符串,且最长为50个字符"
                     , unique = True      # 声明是"唯一约束"
                     , nullable = False    # 声明是"非空"
                     )
    # ————创建"班级名称"的字段名————
    class_name = Column( String(100)      # 声明字段的数据类型是"字符串,且最长为100个字符"
                       , nullable = False  # 声明是"非空"
                       )
    # ————创建班级"开课时间"的字段名————
    start_date = Column( DATE             # 声明是字段数据类型是日期
                       , nullable = False  # 开课时间必填
                       )
    # ————创建班级"结课时间"的字段名————
    end_date = Column( DATE               # 声明是字段数据类型是'日期'
                     , nullable = True     # 声明是"可为空"
                     )
    # ————创建班级"创建时间"的字段名————
    created_at = Column( DATETIME         # 声明是字段数据类型是"日期时间"
                       , default=datetime.now  # 声明是创建的默认值就是"当前时间"
                       , server_default=text("CURRENT_TIMESTAMP")
                       , nullable = False         # 声明是"非空"
                       )
    # ————创建班级"更新时间"的字段名————
    update_at = Column( DATETIME         # 声明是字段数据类型是"日期时间"
                       , default=datetime.now  #声明是第一次更新的时间就是第一次创建的时间一致
                       , onupdate=datetime.now   # 声明"最后修改的时间"
                       , server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
                       , nullable = False         # 声明是"非空"
                       )
    # ————创建班级"备注信息"的字段名————
    remark = Column( String(255)           # 声明是字段数据类型是"字符串"
                   , nullable = True        # 声明是"可以为空"
                   )
    # ————创建班级"逻辑删除"的字段名————
    is_deleted = Column( TINYINT           # 逻辑删除标记
                       , default = 0       # 声明默认值是"0，未删除"
                       , server_default = text("0")
                       , nullable = False  # 声明是"非空"
                       )

#班级老师关系表 class_teachers_info_detail 中间表 ORM 模型完整定义
#字段包括id,class_id,teacher_id,role,created_at,updated_at,is_deleted
class ClassTeachers(Base):
    __tablename__ = "class_teachers_info_detail"
    id = Column(
         Integer
        ,primary_key=True
        ,autoincrement=True
        ,comment='关系')
    class_id = Column(
         Integer
        ,ForeignKey('class_info_detail.id')
        ,nullable=False
        ,comment='关联 class_id'
    )
    teacher_id = Column(
         Integer
        ,ForeignKey("teacher_info_detail.id")
        ,nullable=False
        ,comment='关联 teacher_id'
    )
    role = Column(
         VARCHAR(30)
        ,nullable=False
        ,comment='老师在班级中的角色：head_teacher班主任 / lecturer授课老师 / assistant助教'
    )
    created_at = Column(
         DateTime
        ,nullable=False
        ,default=datetime.now()
        ,comment='创建时间'
    )
    updated_at = Column(
         DateTime
        ,nullable=False
        ,default=datetime.now()
        ,comment='更新时间'
    )
    is_deleted = Column(
        TINYINT
        ,nullable=False
        ,default=0
        ,comment='逻辑删除'
    )

class Consultant(Base):
    __tablename__ = "consultant_info_detail"

    id = Column(Integer, primary_key=True, autoincrement=True, comment="主键")
    consultant_no = Column(String(50), unique=True, nullable=False, comment="顾问编号")
    consultant_name = Column(String(50), nullable=False, comment="顾问姓名")
    phone = Column(String(20), nullable=True, comment="联系电话")
    email = Column(String(100), nullable=True, comment="邮箱")
    remark = Column(String(255), nullable=True, comment="备注")

    created_at = Column(DateTime, default=datetime.now, server_default=text("CURRENT_TIMESTAMP"), nullable=False, comment="创建时间")
    updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), nullable=False, comment="更新时间")
    is_deleted = Column(TINYINT, default=0, server_default=text("0"), nullable=False, comment="逻辑删除：0正常，1删除")


class Employment(Base):
    __tablename__ = "employment_info_detail"                              # 实际数据库的表名字
    id = Column(Integer, primary_key=True                   # 主键
                , autoincrement=True                           # 声明是自增主键
                ,comment="就业信息主键id")
    student_id = Column(Integer, ForeignKey("student_info_detail.id")  # 外键 -> students.id
                        , nullable=False                       # 不允许为null
                        ,comment="关联学生id")
    employment_status = Column(String(50)
                               , default="not_started"
                               ,comment="就业状态:not_started/job_hunting/offered/employed")
    employment_open_date = Column(Date
                                  ,comment="就业开放时间")
    offer_date = Column(Date
                        ,comment="offer下发时间")
    company_name = Column(String(100)
                          , comment="就业公司名称")
    salary = Column(DECIMAL(10, 2)                      # 高精度浮点数薪资,最多 10 位数字，小数占 2 位
                    , comment="就业薪资")
    remark = Column(String(255)
                    ,default=None
                    , comment="备注信息")
    created_at = Column(DateTime
                        , default=datetime.now
                        , comment="创建时间")
    updated_at = Column(DateTime
                        , default=datetime.now
                        , onupdate=datetime.now
                        ,comment="更新时间")
    is_deleted = Column(SmallInteger
                        ,default=0
                        ,comment="逻辑删除：0正常，1删除")

class Score(Base):
    __tablename__ = "score_info_detail"
    id = Column(Integer
                , primary_key=True
                ,autoincrement=True
                ,comment="成绩表序号，自增主键"
                )
    student_id = Column(Integer
                        ,ForeignKey("student_info_detail.id")
                        ,nullable=False
                        ,comment="学生学号"
                        )
    score = Column(DECIMAL(4,1)
                   ,CheckConstraint("score between 0 and 100")
                   )
    exam_seq= Column(Integer
                     , nullable=False
                     ,comment="考试序次")
    __table_args__ = (
        UniqueConstraint("student_id"
                         , "exam_seq"
                         , name="uk_student_exam_seq"),
    )#学生id和学生姓名应为联合唯一，即一个学生一次考试只能有一个分数
    exam_date=Column(Date
                     ,default=date.today
                     ,comment="考试日期"
                     )
    created_at=Column(DateTime
                      ,default=datetime.now
                      ,comment="创建时间"
                      )
    updated_at=Column(DateTime
                      ,default=datetime.now
                      ,onupdate=datetime.now
                      ,comment="更新时间"
                      )
    remark=Column(String(225)
                  ,comment="备注说明"
                  )
    is_deleted=Column(Integer
                      ,default=0
                      ,comment="逻辑删除标记：未删除0，已删除1"
                      )

class Student(Base):
    __tablename__ = 'student_info_detail'
    id = Column(Integer
                , primary_key=True
                , autoincrement=True
                , comment = '学生编号，自增主键'
                )
    student_no = Column(VARCHAR(50)
                        ,nullable = True
                        ,unique = True)
    student_name = Column(VARCHAR(50))
    class_id = Column(Integer
                      ,ForeignKey('class_info_detail.id')
                      )#外键约束 班级表的主键id，存在这个班级，学生表才可以输入
    consultant_id = Column(Integer
                           , ForeignKey('consultant_info_detail.id')
                           ,nullable = True
                           )#外键约束 顾问表的主键id，存在这个顾问，才可以写入，允许为空
    native_place = Column(VARCHAR(100)
                          ,nullable = True)
    graduation_school = Column(VARCHAR(100)
                               ,nullable = True)
    major = Column(VARCHAR(100)
                   ,nullable = True)
    enrollment_date = Column(Date
                             ,nullable = False)#入学时间必填
    graduation_date = Column(Date,
                             nullable = True)#毕业时间可以为空
    education = Column(VARCHAR(50)
                       ,nullable = True)#学历可以为空
    age = Column(Integer
                 ,nullable = False)
    gender = Column(VARCHAR(10)
                    ,nullable = False)
    create_at = Column(DATETIME
                       ,default = datetime.now)
    update_at = Column(DATETIME
                       ,default = datetime.now
                       ,onupdate = datetime.now)
    is_deleted = Column(Integer
                        ,default = 0)#逻辑删除，默认为0，为1则表示已删除

class Teacher(Base):
    __tablename__ = 'teacher_info_detail'
    id = Column(
         Integer
        , primary_key=True
        ,autoincrement=True
        ,comment='老师主键')
    teacher_no = Column(
        VARCHAR(50)
        ,nullable=False
        ,unique=True
        ,comment='老师编号'
    )
    teacher_name = Column(
        VARCHAR(50)
        ,nullable=False
        ,comment='老师名字'
    )
    phone = Column(
        VARCHAR(20)
        ,nullable=True
        ,comment='老师电话'
    )
    email = Column(
        VARCHAR(100)
        ,nullable=True
        ,comment='邮箱'
    )
    remark = Column(
        VARCHAR(2550)
        ,nullable=True
        ,comment='备注'
    )
    created_at = Column(
        DateTime
        ,nullable=False
        ,default=datetime.now
        ,comment='创建时间'
    )
    updated_at = Column(
        DateTime
        ,nullable=False
        ,default=datetime.now
        ,comment='更新时间'
    )
    is_deleted = Column(
        TINYINT
        ,nullable=False
        ,default=0
        ,comment='逻辑删除'
    )'''