前面几篇文章里,我主要在用FastAPI写接口,包括参数校验、异步请求和缓存。
接口多了之后,一个很明显的问题就冒出来了:
数据到底该放哪?
如果只是简单Demo,直接写在Python变量里也行。但只要有用户、配置、记录、登录状态这些,就必须用真正的持久化存储。
个人项目的话,我比较喜欢从SQLite开始。
SQLite不用单独跑数据库服务,一个.db文件就能搞定整个数据库,很适合小型项目、个人工具和原型开发。
SQLite是什么
SQLite是一个嵌入式关系型数据库。
和MySQL、PostgreSQL不一样,它不需要单独启动一个数据库服务器。
比如:
project/
├── main.py
├── app.db
└── requirements.txtapp.db直接就是数据库文件。
对个人项目来说这种方式很方便。
尤其是:
- 本地工具
- AI工具
- 小型API服务
- 数据量不大的后台
- 原型项目
没必要一开始就部署一个完整的MySQL。
创建数据库
Python自带sqlite3模块,最简单的方式甚至不用额外装东西。
import sqlite3
conn = sqlite3.connect("app.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
email TEXT,
created_at TEXT
)
""")
conn.commit()
conn.close()第一次跑完之后,项目目录里就会出现:
app.db表也建好了。
插入数据
比如创建用户:
conn = sqlite3.connect("app.db")
cursor = conn.cursor()
cursor.execute(
"""
INSERT INTO users (username, email, created_at)
VALUES (?, ?, ?)
""",
("alice", "[email protected]", "2025-05-05")
)
conn.commit()
conn.close()注意SQL里用的是?占位符,不是直接拼字符串。
别这么写:
sql = f"INSERT INTO users VALUES ('{username}')"字符串拼SQL很容易出注入问题。
查询数据
查询也很简单:
conn = sqlite3.connect("app.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
users = cursor.fetchall()
conn.close()拿到的就是查询结果。
放到FastAPI里
接下来把数据库和API接起来。
from fastapi import FastAPI
import sqlite3
app = FastAPI()
@app.get("/users")
def get_users():
conn = sqlite3.connect("app.db")
cursor = conn.cursor()
cursor.execute(
"SELECT id, username, email FROM users"
)
rows = cursor.fetchall()
conn.close()
return [
{
"id": row[0],
"username": row[1],
"email": row[2],
}
for row in rows
]访问:
GET /users就能直接返回数据库里的用户了。
数据库不只是"存数据"
实际开发里,数据库最大的价值不是简单存东西。
它还负责:
- 数据结构
- 唯一性
- 数据关系
- 查询
- 排序
- 条件过滤
- 持久化
- 数据一致性
比如用户名一般要唯一:
username TEXT NOT NULL UNIQUE这样就算程序有bug,也不会轻易出现两个相同的用户名。
SQLite适合什么项目
SQLite不是"低端数据库"。
它真正的优势是简单。
如果项目规模不大,我一般优先考虑:
FastAPI
↓
SQLite
↓
一个.db文件而不是一上来就:
FastAPI
↓
MySQL
↓
数据库服务器
↓
连接池
↓
Docker技术选型最重要的不是"哪个数据库更强",而是哪个更适合当前项目。
对个人项目来说,能快速开发、部署简单,往往比数据库本身的极限性能更重要。
总结
FastAPI解决的是API服务的问题,SQLite解决的是数据持久化的问题。
两个搭在一起,一个简单的后端服务基本就有了:
HTTP API
+
业务逻辑
+
数据库下一步要解决的就是怎么更好地管理数据库连接,以及怎么让数据库操作融入FastAPI的依赖系统。
这也是后端项目从Demo走向真正项目结构的重要一步。