AI大模型技术之FastAPI

发布时间:2026/9/3 21:19:06
AI大模型技术之FastAPI 一、FastAPI一概念FastAPI 是一个用Python写、基于ASGI协程、开发快性能高、自动生成接口文档的现代Web接口框架。更通俗大白话一句话FastAPI就是python里专门写后端接口的异步框架写接口省事跑得快还自动出在线接口文档。文档 FastAPI - FastAPI源码 GitHub - fastapi/fastapi: FastAPI framework, high performance, easy to learn, fast to code, ready for production · GitHub另外相关概念补充WSGI ASGI Python 同步 / 异步协程大模型语言之python语法一天速通-CSDN博客二创建FastAPI程序1.创建python项目2.安装依赖pip install fastapi pip install uvicorn #若上面安装报错说明镜像问题按下面内容进行安装 pip install fastapi -i https://pypi.tuna.tsinghua.edu.cn/simple pip install uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple3.创建main.py文件并写入以下内容from fastapi import FastAPI 创建APP对象 app FastAPI() app.get(/) def root(): return {message: 这是主页}注FASTAPI的路径处理机制FastAPI 底层维护了一个字典键 K请求路径 请求方法值 V对应的处理函数当请求发送给 uvicorn 服务器时会根据请求路径键找到对应的值函数进行调用并返回结果4.在pycharm终端中通过以下命令运行服务器uvicorn main【py文件名】:app --reload另外代码运行from fastapi import FastAPI app FastAPI() app.get(/) def root(): return {message: 这是主页} 新增下面这段 if name main: import uvicorn # reloadTrue 开启热重载开发用生产环境关掉reload uvicorn.run(fa_1:app, host127.0.0.1, port8000, reloadTrue)注释【1】5.请求参数5.1请求体传参数访问方式http://localhost:8001/docs等【踩坑】【1】PyCharm 点红色方块有时候杀不干净 Windows 下的 uvicorn 子进程。导致打开一直是这个旧内容。解决更换端口号 8001。。。6.路由分发大白话一个 app 管多个接口把不同请求分给不同函数处理就是路由分发。# 导入uvicorn服务器用来启动FastAPI服务 import uvicorn # 导入FastAPI核心类创建主应用实例 from fastapi import FastAPI # 导入test1文件中定义好的子路由对象 from test1 import test1_router # 导入test2文件中定义好的子路由对象 from test2 import test2_router # 创建FastAPI主程序对象title设置接口文档页面标题 app FastAPI(title路由分发演示) # 将test1子路由挂载到主app注册test1模块全部接口 app.include_router(test1_router) # 将test2子路由挂载到主app注册test2模块全部接口 app.include_router(test2_router) # 在主app上定义根路径接口访问地址GET / app.get(/) async def root(): return {message: Hello World} # 程序入口直接运行本main.py会执行这里 if __name__ __main__: # 启动uvicorn服务 # ❗注意传字符串main:app开启reload才生效现在无热加载直接传app对象也可以 uvicorn.run(appmain:app, host0.0.0.0, port8003)三ORM概念及相关内容3.1 概念ORM 对象关系映射把数据库表 → Python 类 / 对象不用手写 SQL 语句ORM 记住 4 句口诀类 数据库一张表类的属性 数据库字段类实例对象 表里的一行数据操作 Python 对象ORM 偷偷帮你写 SQL 操作数据库缺点复杂查询 ORM 不如原生 SQL 灵活简单业务写代码速度飞快不用拼 SQL 字符串。3.2 主流ORM产品对比ORM工具特点适用场景SQLAlchemy功能全面支持ORM和原生SQL灵活度极高文档丰富生态完善。中大型项目、复杂查询场景、需要跨数据库兼容。Django ORM与 Django 框架深度绑定开箱即用简化 CRUD 操作但灵活性较低。Django 框架开发的 Web 应用。Tortoise-ORM异步 ORM支持 async/await与 FastAPI 等异步框架契合度高。异步 Web 应用如 FastAPI 异步数据库驱动。SQLModel基于 SQLAlchemy 和 Pydantic简化模型定义兼顾 ORM 和数据验证。FastAPI 项目追求模型定义简洁性。3.3 ORM的使用3.3.1环境准备# 安装 SQLAlchemy 核心库 pip install sqlalchemy # 安装 MySQL 驱动推荐 pymysql兼容 Python 3.x pip install pymysql3.3.2 准备 MySQL 环境确保本地或远程 MySQL 服务已启动默认端口 3306。创建一个测试数据库如 fastapi_db3.4 操作示例理解------MySQL包含建表、新增、查询、更新、删除from sqlalchemy import create_engine from sqlalchemy.orm import declarative_base, sessionmaker from sqlalchemy import Column, Integer, String # 1. 数据库连接 # mysqlpymysql://账号:密码主机:端口/数据库名 DB_URL mysqlpymysql://root:123456127.0.0.1:3306/testdb engine create_engine(DB_URL, echoTrue) # echoTrue打印执行的SQL调试用 # 2. 基类所有模型继承它 Base declarative_base() # 3.定义模型类对应数据库一张user表 class User(Base): __tablename__ user # 数据库表名 id Column(Integer, primary_keyTrue, autoincrementTrue, comment主键id) name Column(String(50), nullableFalse, comment用户名) age Column(Integer, comment年龄) email Column(String(100), uniqueTrue, comment邮箱) # 4. 创建数据表不存在就创建 Base.metadata.create_all(bindengine) # 5. 获取会话相当于数据库连接会话所有增删改查都通过session SessionLocal sessionmaker(autocommitFalse, autoflushFalse, bindengine) session SessionLocal() # ①新增数据 def add_user(): user1 User(name张三, age25, emailzhangsanxxx.com) user2 User(name李四, age28, emaillisixxx.com) session.add(user1) # 添加单个对象 session.add_all([user2]) # 批量添加 session.commit() # 提交事务真正写入数据库 # ②查询数据 def query_user(): # 查询全部 all_users session.query(User).all() for u in all_users: print(fid:{u.id},name:{u.name},age:{u.age}) # 根据id查单条 u session.query(User).get(1) print(get查询, u.name if u else 不存在) # where条件查询 filter_user session.query(User).filter(User.name 张三).first() print(filter查询, filter_user.email) # 条件 大于 age_gt25 session.query(User).filter(User.age 25).all() print(大于25岁, [x.name for x in age_gt25]) # ③更新数据 def update_user(): u session.query(User).filter(User.name 张三).first() if u: u.age 26 # 修改对象属性 u.email zhangsan_newxxx.com session.commit() # 提交生效 # ④删除数据 def del_user(): u session.query(User).filter(User.name 李四).first() if u: session.delete(u) session.commit() if __name__ __main__: add_user() query_user() update_user() del_user() session.close() #关闭会话核心概念模型类 (class User)对应数据库一张表类属性对应数据表字段。session 会话ORM 和数据库交互载体add/delete只是放到内存必须 commit () 才真正执行。echoTrue控制台打印底层生成的 SQL 语句方便调试。常用查询语法速查# filter多条件 and session.query(User).filter(User.age20, User.name张三).first() # like模糊查询 session.query(User).filter(User.name.like(%张%)).all() # limit 限制条数 session.query(User).limit(2).all() # order_by排序 session.query(User).order_by(User.age.desc()).all()补充FastAPI 里标准获取 session 写法def get_db(): db SessionLocal() try: yield db finally: db.close()容易踩坑点修改、新增、删除后忘记commit()数据库不会变化。查询之后不要跨 session 使用对象会报会话已关闭异常。filter是条件first()拿第一条all()拿列表。