[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-public-OIwLCsr8":3,"public-project-articles-OIwLCsr8":17},{"id":4,"uuid":5,"project_id":6,"title":7,"content":8,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},1124,"OIwLCsr8",55,"03. 开发专业信息增删改查功能（一）","## 怎么做？\n\n1. 创建数据库表 major\n\n```sql\nCREATE TABLE `major` (\n  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',\n  `no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '专业代码',\n  `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',\n  `college` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属学院',\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='专业信息';\n```\n\n2. 创建 Model\n\n```python\nclass Major(Model):\n    \"\"\"专业模块\"\"\"\n    id = fields.IntField(pk=True, null=False)\n    no = fields.CharField(max_length=255, null=True)\n    name = fields.CharField(max_length=255, null=True)\n    college = fields.CharField(max_length=255, null=True)\n\n    class Meta:\n        table = 'major'\n```\n\n3. 开始写接口\n\n- 新增数据：定义 CreatePydantic 接受数据\n\n```python\nMajorCreatePydantic = create_model(\n    \"MajorCreatePydantic\",\n    **{\n        name: (Optional[field.annotation], None)\n        for name, field in MajorPydantic.model_fields.items()\n    }\n)\n```\n\n要定义 router：router = APIRouter(prefix=\"\u002Fmajor\")\n\n通过 router 帮我们创建一个 post 请求，执行数据库操作，注意是  aysnc、await 异步操作的\n\n```python\n@router.post(\"\u002Fadd\")\naysnc def add(major_create_pydantic: MajorCreatePydantic):\n    # 写数据库插入逻辑\n    create_data = major_create_pydantic.model_dump()  # 转换数据模型\n    await Major.create(**create_data)\n    return Result.success()    \n```\n\n然后你可以在数据库操作的那里。配置一个 try  except  处理数据库的异常信息\n\n\n\n## 本节课代码\n\n```python\nfrom typing import Optional\n\nfrom fastapi import APIRouter\nfrom pydantic import create_model, BaseModel\nfrom tortoise.contrib.pydantic import pydantic_model_creator\n\nfrom common.exception_handler import CustomException\nfrom common.result import Result\nfrom models import Major\n\nrouter = APIRouter(prefix=\"\u002Fmajor\")\n\nMajorPydantic = pydantic_model_creator(Major)\n\nMajorCreatePydantic = create_model(\n    \"MajorCreatePydantic\",\n    **{\n        name: (Optional[field.annotation], None)\n        for name, field in MajorPydantic.model_fields.items()\n    }\n)\n\n\n# 新增\n@router.post(\"\u002Fadd\")\nasync def add(major_create_pydantic: MajorCreatePydantic):\n    # 将参数转换成 字典数据\n    create_data = major_create_pydantic.model_dump(exclude_unset=True, exclude={\"id\"})\n    await Major.create(**create_data)  # no=xxx,name=xxx,college=xxx\n    return Result.success()\n\n\n# 更新\n@router.put(\"\u002Fupdate\")\nasync def add(major_create_pydantic: MajorCreatePydantic):\n    if major_create_pydantic.id is None:\n        raise CustomException(\"缺少参数ID\")\n    # 将参数转换成 字典数据\n    update_data = major_create_pydantic.model_dump(exclude_unset=True, exclude={\"id\"})\n    try:\n        await Major.filter(id=major_create_pydantic.id).update(**update_data)  # no=xxx,name=xxx,college=xxx\n    except Exception as e:\n        print(e)\n        raise CustomException(\"数据库操作异常\")\n    return Result.success()\n\n```\n\n","coding",1,366,2198,"2025-12-19 17:28:47","2026-05-03 22:49:02","基于FastAPI+Vue3的学生信息管理系统","student-information",{"project":18,"items":19},{"id":6,"title":15,"slug":16},[20,28,35,42,43,50,57,64,71,78,85,92,98,105],{"id":21,"uuid":22,"project_id":6,"title":23,"type":9,"status":10,"public_enabled":10,"views":24,"sort":25,"created_at":26,"updated_at":27,"project_title":15,"project_slug":16},1118,"ziKCD5pq","00. 资料和脚手架获取方式",1029,2182,"2026-01-08 17:19:23","2026-05-03 22:50:49",{"id":29,"uuid":30,"project_id":6,"title":31,"type":9,"status":10,"public_enabled":10,"views":32,"sort":33,"created_at":34,"updated_at":14,"project_title":15,"project_slug":16},1119,"bxgr45Kb","01. 学生信息管理系统介绍",461,2187,"2025-12-18 18:35:51",{"id":36,"uuid":37,"project_id":6,"title":38,"type":9,"status":10,"public_enabled":10,"views":39,"sort":40,"created_at":41,"updated_at":14,"project_title":15,"project_slug":16},1120,"jlnSrc9J","02. 导入并运行项目脚手架",509,2188,"2025-12-18 18:36:05",{"id":4,"uuid":5,"project_id":6,"title":7,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},{"id":44,"uuid":45,"project_id":6,"title":46,"type":9,"status":10,"public_enabled":10,"views":47,"sort":48,"created_at":49,"updated_at":14,"project_title":15,"project_slug":16},1128,"anqokUWU","04. 开发专业信息增删改查功能（二）",241,2211,"2025-12-22 17:24:47",{"id":51,"uuid":52,"project_id":6,"title":53,"type":9,"status":10,"public_enabled":10,"views":54,"sort":55,"created_at":56,"updated_at":14,"project_title":15,"project_slug":16},1129,"8MbeMJwP","05. 开发前端页面管理专业信息",239,2212,"2025-12-22 17:25:07",{"id":58,"uuid":59,"project_id":6,"title":60,"type":9,"status":10,"public_enabled":10,"views":61,"sort":62,"created_at":63,"updated_at":14,"project_title":15,"project_slug":16},1136,"wLyZvGac","06. 开发班级信息管理",207,2225,"2026-01-08 18:03:28",{"id":65,"uuid":66,"project_id":6,"title":67,"type":9,"status":10,"public_enabled":10,"views":68,"sort":69,"created_at":70,"updated_at":14,"project_title":15,"project_slug":16},1137,"PIryZqq8","07. 开发学生信息管理功能",191,2226,"2025-12-23 18:00:42",{"id":72,"uuid":73,"project_id":6,"title":74,"type":9,"status":10,"public_enabled":10,"views":75,"sort":76,"created_at":77,"updated_at":14,"project_title":15,"project_slug":16},1141,"PeUzzy9n","08. 优化学生模块代码",167,2233,"2025-12-24 16:54:01",{"id":79,"uuid":80,"project_id":6,"title":81,"type":9,"status":10,"public_enabled":10,"views":82,"sort":83,"created_at":84,"updated_at":14,"project_title":15,"project_slug":16},1142,"CTQ2w9Yp","09. 开发学生登录、注册、个人信息、修改密码功能",164,2234,"2025-12-24 16:54:18",{"id":86,"uuid":87,"project_id":6,"title":88,"type":9,"status":10,"public_enabled":10,"views":89,"sort":90,"created_at":91,"updated_at":14,"project_title":15,"project_slug":16},1143,"6GmNfUzm","10. 开发课程信息管理模块",161,2235,"2025-12-24 16:54:34",{"id":93,"uuid":94,"project_id":6,"title":95,"type":9,"status":10,"public_enabled":10,"views":75,"sort":96,"created_at":97,"updated_at":14,"project_title":15,"project_slug":16},1148,"u4OeLaw2","11. 开发学生选课功能",2245,"2025-12-25 17:51:39",{"id":99,"uuid":100,"project_id":6,"title":101,"type":9,"status":10,"public_enabled":10,"views":102,"sort":103,"created_at":104,"updated_at":14,"project_title":15,"project_slug":16},1149,"OSx3Mogl","12. 开发学生成绩模块",163,2246,"2026-01-08 18:02:51",{"id":106,"uuid":107,"project_id":6,"title":108,"type":9,"status":10,"public_enabled":10,"views":109,"sort":110,"created_at":111,"updated_at":14,"project_title":15,"project_slug":16},1155,"mnCD9CqK","13. 开发系统公告功能",157,2258,"2025-12-29 15:53:35"]