别等着被骂:API上线前,一定要把SQLite换成MySQL,附 FastAPI对接代码

31 阅读4分钟

fIhfuK84J

还在用 SQLite 吗?

当用户量增高,你会发现数据存不住、并发扛不住、扩展没门路,连夜改架构的滋味谁懂?

别慌!这篇文章带你从 0 到 1 升级 MySQL 生产级数据库,对接 FastAPI 一步到位,彻底解决你的数据库焦虑!

为什么 SQLite 会不再够用?

在项目初期,SQLite 确实是完美选择。

它轻量、简单、无需单独部署。我的 FastAPI 应用在本地运行流畅,测试数据完美存储,一切都那么美好。

但 SQLite 的局限性也很明显:

  1. 并发写入瓶颈:同一时间只能有一个写入操作
  2. 缺乏网络接口:无法支持多应用实例同时访问
  3. 扩展性限制:单机性能上限很快触顶

当你的用户量快速增长,或者需要支撑企业级应用的稳定运行时,MySQL、PostgreSQL 这类专业生产级数据库才是正解

它们专注于可扩展性、并发控制和数据安全,运行在独立服务器上,能轻松应对大规模业务场景。

从零搭建MySQL生产环境

01、下载&安装 MySQL

访问 dev.mysql.com/downloads/m… 下载 MySQL 安装包。

image-20260116232316886

我的 mac OS 是 Intel 芯片,所以选的 x86 这个包。(根据你的实际情况做选择。)

你也可以,点击 “Archives” 可以看到所有的历史版本包。

image-20260116232604566

下载完成后,打开安装包,按照提示安装就可以了。

image-20260116232854679

安装完成后,在“系统偏好设置”里,可以找到 MysSQL 图标。 打开它,就可以启动 MySQL 。

image-20260116233004033

02、下载&安装 MySQL Workbench

访问 dev.mysql.com/downloads/ ,点击 “MySQL Workbench”

image-20260116233231358

image-20260116233417539

选择合适的安装包,点击 “Download” 下载。

下载完成后,打开,并按照提示安装就可以了。

image-20260116233555439

03、创建数据表

首先,要保证 MySQL 已经启动成功了。

其次,打开 MySQL Workbench,创建一个连接。

image-20260117110736223

让我们创建一个 TodoApp 应用程序的数据库:

在 SCHEMAS 区域 右击 “Create schema”

给 Schema Name 输入 “TodoApplicationDatabase”,选择 "Character Set" 和 “Collation”

image-20260117112327326

点击 Apply。现在数据库 "TodoApplicationDatabase" 就创建好了。

双击 "TodoApplicationDatabase",在右侧 Query 窗口粘贴下面 SQL 代码(建表语句),执行它。

CREATE TABLE users (
        id int(11) NOT NULL AUTO_INCREMENT, 
        email VARCHAR(200) DEFAULT NULL, 
        username VARCHAR(45) DEFAULT NULL, 
        first_name VARCHAR(45) DEFAULT NULL, 
        last_name VARCHAR(45) DEFAULT NULL, 
        hashed_password VARCHAR(200) DEFAULT NULL, 
        is_active BOOLEAN NOT NULL DEFAULT 1,
        role VARCHAR(45) DEFAULT NULL, 
        PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

CREATE TABLE todos (
        id int(11) NOT NULL AUTO_INCREMENT, 
        title VARCHAR(200) DEFAULT NULL, 
        description VARCHAR(200) DEFAULT NULL, 
        priority INT DEFAULT NULL, 
        complete BOOLEAN NOT NULL DEFAULT 0 , 
        owner_id INT NOT NULL, 
        PRIMARY KEY (id), 
        FOREIGN KEY(owner_id) REFERENCES users (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

运行完成后,刷新 Tables,就会出现两个表。

可以使用 SQL 语句测试一下

SELECT * FROM todos;

image-20260117112703746

SELECT * FROM users;

image-20260117112717644

FastAPI 与 MySQL 的无缝对接

数据库就位后,下一步是让 FastAPI 应用与之对接。FastAPI 一般通过 SQLAlchemy 和 PyMySQL 与 MySQL 建立连接。

01、安装依赖库:
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
02、修改数据库连接 database.py
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:123456@127.0.0.1:3306/TodoApplicationDatabase"

# 删除 connect arguments
engine = create_engine(SQLALCHEMY_DATABASE_URL)
03、启动应用程序
uvicorn main:app --reload
04、测试

打开 Swagger UI 页面,刷新页面。找到 POST /auth 接口,添加两个用户信息。

{
  "username": "wangerge",
  "email": "wangerge@email.com",
  "first_name": "erge",
  "last_name": "wang",
  "password": "test1234",
  "role": "admin"
}

{
  "username": "userone",
  "email": "userone@email.com",
  "first_name": "one",
  "last_name": "user",
  "password": "test1234",
  "role": ""
}

切回 "MySQL Workbench" 使用 SQL 查询数据。

SELECT * FROM users;

image-20260117113953263

切回 Swagger UI 页面,刷新页面,找到 POST /todo 接口,添加一条待办事项。

{
  "title": "Learn FastAPI",
  "description": "Because it's awesome",
  "priority": 5,
  "complete": false
}

再切回 "MySQL Workbench" 使用 SQL 查看数据。

SELECT * FROM todos;

image-20260117114055074

至此,我们的 FastAPI 应用程序已经升级到了 MySQL 数据库。

写在最后

技术选型不仅影响当前开发效率,更决定了产品的未来天花板。选择MySQL,就是为应用的可扩展性买了一份长期保险。

如果你正在做应用扩容,这篇文章的步骤可以直接照搬。

想要获取本章完整代码,请在评论区回复 【FastAPI】,代码直接复制就能跑。

关于 FastAPI 的其他疑问

别等被骂才后悔:APP上线前,一定要把SQLite换成PostgreSQL,附 FastAPI对接代码

你的API在裸奔?踩坑8小时,从“越权裸奔”到“权限严控”:FastAPI+JWT+依赖注入,这套方案闭眼抄

你的APP要用户反复登录?密码传来传去?FastAPI+JWT实战,一个令牌全打通,安全与体验兼得,代码直接抄

FastAPI 新手紧急避坑:10分钟搞定用户认证4大坑,代码复制即用

“警惕!FastAPI接口一夜「消失」” 95%程序员靠这招自救:我的路由分离血泪史

相关内容我都给大家做好了,感兴趣的朋友来「我的主页」找一找,直接就可以看到。

欢迎关注 Gong 众号 「王二哥的技术笔记」,每天分享「Python」、「职场」有趣干货,千万不要错过!