还在用 SQLite 吗?
当用户量增高,你会发现数据存不住、并发扛不住、扩展没门路,连夜改架构的滋味谁懂?
别慌!这篇文章带你从 0 到 1 升级 PostgreSQL 生产级数据库,对接 FastAPI 一步到位,彻底解决你的数据库焦虑!
为什么 SQLite 会不再够用?
在项目初期,SQLite 确实是完美选择。
它轻量、简单、无需单独部署。我的 FastAPI 应用在本地运行流畅,测试数据完美存储,一切都那么美好。
但 SQLite 的局限性也很明显:
- 并发写入瓶颈:同一时间只能有一个写入操作
- 缺乏网络接口:无法支持多应用实例同时访问
- 扩展性限制:单机性能上限很快触顶
当你的用户量快速增长,或者需要支撑企业级应用的稳定运行时,MySQL、PostgreSQL 这类专业生产级数据库才是正解。
它们专注于可扩展性、并发控制和数据安全,运行在独立服务器上,能轻松应对大规模业务场景。
从 SQLite 到 PostgreSQL 的 3 大痛点
想切换到 PostgreSQL,很多开发者会卡在这三道坎:
- 环境搭建难:不知道怎么在 Mac 上安装配置,命令行操作容易出错
- 可视化操作懵:纯命令行管理数据太麻烦,图形化工具不会用
- 应用对接愁:好不容易装好数据库,却不知道怎么和 FastAPI 打通
别担心,接下来的步骤帮你逐一击破这些难题。
PostgreSQL 从安装到对接 FastAPI 全流程
我们以 Mac 系统为例,手把手完成 PostgreSQL 生产级部署,还会对接 FastAPI 应用。
01、安装 PostgreSQL
安装 PostgreSQL 推荐使用 Postgres.app,Postgres.app 是 macOS 上安装 Postgres 最简单的方法。
访问 postgresapp.com/downloads.h…
Postgres.app 安装可以参考官网。postgresapp.com/
图中的命令,我贴在下面了
sudo mkdir -p /etc/paths.d &&
echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
02、安装图形化管理工具 pgAdmin4
访问 www.pgadmin.org/download/ 下载 mac 版本。
安装后打开,首次启动设置密码。
接着注册服务器 右键 “Server” - Register - Server
Name:TodoApplicationServer
Host name/address:127.0.0.1(或localhost)
Port:5432
Username:postgres
Password:test1234
填写完,点 “Save” 保存。
03、创建生产级数据库和数据表
创建数据库
- 右键
Databases→Create→Database - 名称:
TodoApplicationDatabase
创建数据表
展开 TodoApplicationDatabase → Schemas → public → Tables
打开 SQL 编辑窗口,执行以下 SQL 语句,创建用户表和待办事项表:
CREATE TABLE users (
id SERIAL,
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 DEFAULT NULL,
role VARCHAR(45) DEFAULT NULL,
PRIMARY KEY (id)
);
CREATE TABLE todos (
id SERIAL,
title VARCHAR(200) DEFAULT NULL,
description VARCHAR(200) DEFAULT NULL,
priority INTEGER DEFAULT NULL,
complete BOOLEAN DEFAULT NULL,
owner_id INTEGER DEFAULT NULL,
PRIMARY KEY (id),
FOREIGN KEY(owner_id) REFERENCES users (id)
);
执行完成后,刷新 Tables,就能看到 users 和 todos 两张表
可以使用下面 sql 查看表字段
SELECT * FROM todos;
SELECT * FROM users;
04、对接 FastAPI,实现数据互通
安装数据库依赖
在终端执行命令安装 psycopg2-binary:
pip install psycopg2-binary -i https://pypi.tuna.tsinghua.edu.cn/simple
修改数据库连接配置(database.py)
SQLALCHEMY_DATABASE_URL = "postgresql://postgres:test1234@localhost/TodoApplicationDatabase"
# 删除 connect arguments
engine = create_engine(SQLALCHEMY_DATABASE_URL)
验证数据互通
切回 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": ""
}
再切回 pgAdmin4 使用 SQL 查看数据。
SELECT * FROM users;
此时 users 表,已经有数据了。
再切回 Swagger UI 页面,刷新页面,找到 POST /todo 接口,添加一条待办事项。
{
"title": "Learn FastAPI",
"description": "Because it's awesome",
"priority": 5,
"complete": false
}
再切回 pgAdmin4 使用 SQL 查看数据。
SELECT * FROM todos;
此时 todos 表,已经有数据了。
至此,我们的 FastAPI 应用程序已经升级到了 postgreSQL 数据库。
写在最后
从 SQLite 切换到 PostgreSQL,不是简单的工具替换,而是你的应用从 “小打小闹” 到 “稳定投产” 的关键一步。
如果你正在做应用扩容,这篇文章的步骤可以直接照搬。
想要获取文章中的安装包,请在评论区回复 【FastAPI】。
关于 FastAPI 的其他疑问
你的API在裸奔?踩坑8小时,从“越权裸奔”到“权限严控”:FastAPI+JWT+依赖注入,这套方案闭眼抄
你的APP要用户反复登录?密码传来传去?FastAPI+JWT实战,一个令牌全打通,安全与体验兼得,代码直接抄
FastAPI 新手紧急避坑:10分钟搞定用户认证4大坑,代码复制即用
“警惕!FastAPI接口一夜「消失」” 95%程序员靠这招自救:我的路由分离血泪史
10分钟搞定FastAPI中“数据库连接管理、参数校验、文档维护”三大核心难题,让新手也能轻松地写出可落地的API
相关内容我都给大家做好了,感兴趣的朋友来「我的主页」找一找,直接就可以看到。
关注我,每天分享「Python」、「职场」有趣干货,千万不要错过!