Skip to content

后端与数据库开发

研究后端常见目标是把模型或数据能力变成稳定接口。先做单进程、单数据库的可测试闭环,再根据真实并发、数据量和可靠性需求增加组件。

FastAPI

FastAPI 使用 Python 类型注解和 Pydantic 模型定义请求、响应与自动文档。

python
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class PredictRequest(BaseModel):
    text: str

@app.post('/predict')
async def predict(body: PredictRequest):
    return {'length': len(body.text)}

本地开发可用 fastapi dev 或 ASGI 服务器启动,生产命令以当前官方部署文档为准。模型加载放在应用生命周期中,不要每次请求重新加载;CPU/GPU 推理是否异步取决于底层任务,给普通同步函数加 async 不会自动提升吞吐。

Pydantic

Pydantic 在系统边界验证外部数据。区分“字段缺失”“值为 null”和“默认值”,为时间、枚举和嵌套结构使用明确类型。内部高频数值循环不必反复验证同一对象。

Schema 是接口合同,修改字段名、类型和默认值都可能破坏客户端;接口演化应有版本或兼容策略。

Flask

Flask 核心简单,适合小服务和高度自定义的项目。路由、验证、数据库、迁移和文档需要自己选择组合,因此团队规范比框架默认更重要。新建强类型 JSON API 时 FastAPI 通常更省配置;维护已有 Flask 生态则不必为了潮流重写。

SQLAlchemy

SQLAlchemy 管理连接、SQL 表达式、ORM 和事务。请求级会话要按时关闭,事务失败要回滚;复杂查询先理解生成的 SQL 和索引,而不是堆 ORM 调用。

数据库结构变更使用迁移工具,不能只改 Python Model。测试至少覆盖约束、事务和并发敏感路径。

SQLite

SQLite 是单文件关系数据库,适合本地工具、单用户应用、实验元数据和原型。它无需独立服务,备份和分发简单;高并发写入、跨主机共享和复杂权限不是它的强项。

不要把数据库文件放在不可靠的网络文件系统或多人同步目录中。启用外键约束,并把迁移纳入版本控制。

PostgreSQL

PostgreSQL 适合需要并发、事务、复杂查询、JSON 和扩展的生产系统。为查询条件和关联键设计索引,通过连接池限制连接数量;EXPLAIN 用于检查计划,但优化必须基于真实数据分布。

备份只有在成功恢复后才算有效。账号使用最小权限,生产连接通过 TLS 和密钥管理,不把密码写入仓库 URL。

MySQL

MySQL 生态成熟,适合已有团队和托管环境。建表时显式选择字符集、排序规则和事务引擎;注意严格模式、时区和大小写行为在不同部署中的差异。PostgreSQL 与 MySQL 通常二选一,选择团队能维护且符合既有数据栈的方案。

Redis

Redis 常用于缓存、会话、限流和队列。缓存不是事实来源:设计 TTL、失效和击穿保护,并假设数据可丢失或重建。涉及持久队列、强一致事务或长期数据时,应评估专门系统。

最小项目组合

原型可从 FastAPI + SQLite 开始;当出现多实例、并发写和严格运维要求时迁移 PostgreSQL/MySQL;只有确认缓存或队列能解决实际瓶颈时再加入 Redis。每多一个服务,就多一套部署、监控、备份和故障模式。

参考:FastAPI 文档Pydantic 文档SQLAlchemy 文档PostgreSQL 文档Redis 文档