还在用 SQLite 吗?
当用户量增高,你会发现数据存不住、并发扛不住、扩展没门路,连夜改架构的滋味谁懂?
别慌!这篇文章带你从 0 到 1 升级 MySQL 生产级数据库,对接 FastAPI 一步到位,彻底解决你的数据库焦虑!
为什么 SQLite 会不再够用?
在项目初期,SQLite 确实是完美选择。
它轻量、简单、无需单独部署。我的 FastAPI 应用在本地运行流畅,测试数据完美存储,一切都那么美好。
但 SQLite 的局限性也很明显:
- 并发写入瓶颈:同一时间只能有一个写入操作
- 缺乏网络接口:无法支持多应用实例同时访问
- 扩展性限制:单机性能上限很快触顶
当你的用户量快速增长,或者需要支撑企业级应用的稳定运行时,MySQL、PostgreSQL 这类专业生产级数据库才是正解。
它们专注于可扩展性、并发控制和数据安全,运行在独立服务器上,能轻松应对大规模业务场景。
从零搭建MySQL生产环境
01、下载&安装 MySQL
访问 dev.mysql.com/downloads/m… 下载 MySQL 安装包。
我的 mac OS 是 Intel 芯片,所以选的 x86 这个包。(根据你的实际情况做选择。)
你也可以,点击 “Archives” 可以看到所有的历史版本包。
下载完成后,打开安装包,按照提示安装就可以了。
安装完成后,在“系统偏好设置”里,可以找到 MysSQL 图标。 打开它,就可以启动 MySQL 。
02、下载&安装 MySQL Workbench
访问 dev.mysql.com/downloads/ ,点击 “MySQL Workbench”
选择合适的安装包,点击 “Download” 下载。
下载完成后,打开,并按照提示安装就可以了。
03、创建数据表
首先,要保证 MySQL 已经启动成功了。
其次,打开 MySQL Workbench,创建一个连接。
让我们创建一个 TodoApp 应用程序的数据库:
在 SCHEMAS 区域 右击 “Create schema”
给 Schema Name 输入 “TodoApplicationDatabase”,选择 "Character Set" 和 “Collation”
点击 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;
SELECT * FROM users;
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;
切回 Swagger UI 页面,刷新页面,找到 POST /todo 接口,添加一条待办事项。
{
"title": "Learn FastAPI",
"description": "Because it's awesome",
"priority": 5,
"complete": false
}
再切回 "MySQL Workbench" 使用 SQL 查看数据。
SELECT * FROM todos;
至此,我们的 FastAPI 应用程序已经升级到了 MySQL 数据库。
写在最后
技术选型不仅影响当前开发效率,更决定了产品的未来天花板。选择MySQL,就是为应用的可扩展性买了一份长期保险。
如果你正在做应用扩容,这篇文章的步骤可以直接照搬。
想要获取本章完整代码,请在评论区回复 【FastAPI】,代码直接复制就能跑。
关于 FastAPI 的其他疑问
别等被骂才后悔:APP上线前,一定要把SQLite换成PostgreSQL,附 FastAPI对接代码
你的API在裸奔?踩坑8小时,从“越权裸奔”到“权限严控”:FastAPI+JWT+依赖注入,这套方案闭眼抄
你的APP要用户反复登录?密码传来传去?FastAPI+JWT实战,一个令牌全打通,安全与体验兼得,代码直接抄
FastAPI 新手紧急避坑:10分钟搞定用户认证4大坑,代码复制即用
“警惕!FastAPI接口一夜「消失」” 95%程序员靠这招自救:我的路由分离血泪史
相关内容我都给大家做好了,感兴趣的朋友来「我的主页」找一找,直接就可以看到。
欢迎关注 Gong 众号 「王二哥的技术笔记」,每天分享「Python」、「职场」有趣干货,千万不要错过!