切换日光/暗黑模式
102. 数据库 SQL 工具与后端自定义接口
学习目标
这一节继续完善 Vibe 系统的后端能力,重点是让 AI 能查询表结构、执行受控 SQL,并通过动态后端代码提供自定义接口。
学完后,你应该能理解:
- 为什么模块配置要保存前端代码和后端接口代码;
show create table能帮 AI 理解数据库表结构;- 执行 SQL 的工具为什么必须限制使用场景;
- 后端自定义接口如何通过代码片段挂到模块上;
- FastAPI 路由为什么不能简单“后注册覆盖前注册”;
- 做 AI 代码生成系统时,安全边界比功能本身更重要。
模块配置里的代码字段
Vibe 系统的模块不是只存一个菜单名称。
模块记录里会维护几类核心内容:
- 模块基础信息;
- 模块配置;
- 前端页面代码;
- 后端接口代码;
- 建表语句。
前端代码可以使用已经封装好的 AutoTable,后端代码则用于补充通用 CRUD 之外的业务接口。
对只写过 JS 的人来说,可以先把模块配置理解成一份“页面和接口的 schema”。不同的是,这份 schema 不只是描述字段,还会保存可执行的前后端代码片段。
查询建表语句
AI 要生成或修改模块,必须先知道当前表结构。
课程里实现了一个查询建表语句的接口,核心是执行类似下面的 SQL:
sql
show create table 表名这个结果会返回表名和完整建表语句。
有了建表语句,AI 才能判断:
- 当前表是否存在;
- 已有哪些字段;
- 字段类型是什么;
- 是否需要新增字段;
- 后端接口应该围绕哪张表工作。
这一步类似你写前端前先看接口文档。AI 写后端代码前,也需要先看数据库结构。
执行 SQL 工具
系统还准备了执行 SQL 的工具。
它可以接收一段 SQL,先做基础预处理,例如去掉注释和空行,再执行数据库操作。
执行后会根据 SQL 类型返回不同结果:
create table、alter table、drop table这类结构变更,返回执行成功和影响信息;- 查询或数据操作类 SQL,尝试返回查询结果;
- 没有可返回结果的 SQL,也要能正常返回成功状态。
这个工具是 Vibe 系统能够让 AI 建表、改表的基础。
但它也是危险能力。
SQL 工具的安全边界
课程特别强调,执行 SQL 不能直接用于生产环境的普通业务。
原因很简单:
- AI 可能生成错误 SQL;
- 大表加字段可能锁表;
- 错误删除或更新会破坏数据;
- 生产数据库操作必须有人审核;
- 真正企业环境里可能还要短信验证码、审批流、权限控制。
所以这个能力更适合开发环境、测试环境或内部提效工具。
如果以后面试时讲这个项目,不能只说“AI 可以执行 SQL”。更重要的是说明你知道它的风险,并且知道生产环境需要哪些安全措施。
后端自定义接口
通用模块默认有增删改查接口,但真实业务经常需要特殊接口。
例如:
- 特殊删除接口;
- 状态校验接口;
- 批量处理接口;
- 需要事务的业务接口;
- 需要悲观锁的并发接口。
课程里通过后端代码字段,让模块可以定义额外接口。
这些接口不是写死在项目源码里,而是跟模块记录绑定。AI 可以根据用户需求生成这段后端代码,再由系统执行或保存。
装饰器形式的接口定义
后端接口代码使用接近 FastAPI 的装饰器写法。
可以把它理解成:
python
@router.post("/module/xxx/custom")
async def custom_api(...):
...装饰器负责描述接口路径和请求方法,函数负责处理业务逻辑。
这种写法对 AI 友好,因为它和常见 FastAPI 项目非常接近。AI 读过技能文档后,更容易生成符合系统规则的代码。
FastAPI 路由覆盖限制
课程里还提到一个重要细节:
FastAPI 本身不是简单地让后注册的路由覆盖先注册的路由。
如果你注册两个相同路径、相同方法的接口,通常先注册的路由仍然会生效。
所以要实现“覆盖默认接口”,不能只追加一段新路由代码。
更合理的方式是:
- 设计独立的自定义接口路径;
- 或在通用接口执行前检查模块后端代码;
- 如果后端代码声明了覆盖逻辑,就优先执行覆盖逻辑;
- 如果没有覆盖逻辑,再走默认 CRUD。
这一点为后面覆盖默认接口做铺垫。
阶段重点
这一节不是在学某一个 SQL 语句。
重点是理解 AI 生成后端能力时需要三类基础设施:
- 能看懂当前数据库结构;
- 能在受控环境里执行数据库变更;
- 能把模块级后端代码挂到真实接口流程里。
只有这些基础打好,AI 才不是只会生成文本,而是能真正参与系统开发。