3分钟搞定FastAPI的数据库设置,把数据存储玩明白,复制代码就能用(一)

25 阅读5分钟

fHqQ6UJgG

为什么我们需要数据库?

想象一下,你正在开发一个"待办事项"应用程序(TodoApp)。用户需要记录各种任务:买菜、学习、喂狗……这些数据需要被安全存储、快速检索。

这就是数据库的用武之地:它像一个智能文件柜,不仅能安全存放数据,还能让你快速找到需要的信息。

数据库管理系统(DBMS)就是用于管理这个文件柜的软件。

SQLite、MySQL、PostgreSQL 都是目前流行的数据库选择,而 SQL 则是人与这些数据库沟通的标准语言。

搭建 TodoApp 数据库

原生的 SQL 语句看起来冰冷而晦涩,连接、关闭、异常处理…每一步都充满陷阱。如何让你熟悉的 Python 对象与数据库里陌生的表联系起来呢?

这就是我们需要 ORM(对象关系映射) 的原因。

SQLAlchemy 是 Python 中最强大的 ORM 工具,它能将 Python 类自动转换为数据库表,让你用熟悉的 Python 语法操作数据库。

01、创建数据库连接(database.py)

我们新建一个 FastAPI 项目,名为 “FastAPIPro”。

在项目根目录,新建一个 Python 包,名为 “TodoApp”。

在 “TodoApp” 目录,新建一个 “database.py” 文件。内容如下:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 数据库文件路径,程序运行后会自动创建
SQLALCHEMY_DATABASE_URL = 'sqlite:///./todos.db'

# 创建引擎,并关闭线程检查
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})

# 创建会话(用来操作数据库的“工具”)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 基础类(所有表模型都要继承它)
Base = declarative_base()

不用纠结每个参数原理,直接复制先用起来,

02、定义数据模型(models.py)

在这个文件里,将定义 “待办事项” 表要存哪些数据。

在 “TodoApp” 目录,新建 models.py 文件。内容如下:

from database import Base
from sqlalchemy import Column, Integer, String, Boolean


class Todos(Base):

    __tablename__ = "todos"  # 数据库表名,叫todos
	
    # 主键id:自动递增,唯一标识每条数据(不需要手动输入)
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String)						# 待办标题
    description = Column(String)				# 待办描述
    priority = Column(Integer)					# 优先级
    complete = Column(Boolean, default=False)	# 是否完成(默认未完成,0=否,1=是)
03、创建数据库和表(main.py)

执行文件代码,将自动生成 todos.db文件和todos表。

新建main.py文件,代码如下:

from fastapi import FastAPI
import models
from database import engine

app = FastAPI()

# 关键!所有继承Base的模型,都会在数据库中自动创建对应的表
models.Base.metadata.create_all(bind=engine)
04、运行应用程序

在终端,进入 TodoApp 目录,并输入下面命令:

uvicorn main:app --reload

在终端看到 “Application startup complete.” 就是成功了!此时在 TodoApp 目录下会出现 todos.db文件,数据库和表就已经自动创建出来了。

SQL 实战:从入门到熟练

进行 SQLite3 命令行前,让我们先去安装它。

01、环境准备:安装 SQLite3 (Mac OS)

首先,需要先安装 Homebrew。我们访问 brew.sh ,复制页面中的这个命令。

image-20260108112143902

把这条命令粘贴到终端,并执行它。我把这个命令也粘到出来了。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

执行完成后,关闭终端,并重新打开它。

执行 brew list ,查看我们是否已经有安装 sqlite。如果没有,使用下面命令安装它:

brew install sqlite

它将安装所有 sqlite 依赖项。

安装完成后,我们可以在终端执行 sqlite3 命令,进入 sqlite 命令行。

最后,可以使用 .quit 退出 sqlite 命令行

(.venv) wangerge_notes: TodoApp$ sqlite3 
SQLite version 3.37.0 2021-12-09 01:34:53
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .quit

现在,我们可以在 sqlite 命令行,用 SQL 与数据库进行 “沟通”。

02、增:插入待办数据

不用写 id(自动递增)

-- 插入1条待办
INSERT INTO todos (title, description, priority, complete)
VALUES ('去超市', '买3斤鸡蛋', 4, False);

-- 再插入3条,丰富数据
INSERT INTO todos (title, description, priority, complete) VALUES ('剪草坪', '草长到10cm了', 3, False);
INSERT INTO todos (title, description, priority, complete) VALUES ('喂狗', '用新品牌狗粮', 5, False);
INSERT INTO todos (title, description, priority, complete) VALUES ('学编程', '每天1小时Python', 5, False);

-- 查看 todos 表内的数据
SELECT * FROM todos;
03、查:查询待办数据
-- 查询所有数据
SELECT * FROM todos;

-- 只查询标题
SELECT title FROM todos;

-- 按优先级查询数据
SELECT * FROM todos WHERE priority = 5;
04、改:更新待办状态
-- 将ID为5的任务标记为完成
UPDATE todos SET complete = True WHERE id = 5;
05、删:删除待办数据
-- 删除ID为4的任务
DELETE FROM todos WHERE id = 4;
06、终端操作小技巧

安装 SQLite3 后,你可以在终端直接操作数据库:

sqlite3 todos.db      # 连接数据库
.schema               # 查看表结构
.mode table           # 设置显示模式
.quit				  # 退出数据库
SELECT * FROM todos;  # 查询数据

结尾:你的数据库实战,才刚刚开始!

恭喜你!按照上面的步骤,你已经成功搭建了可对接 API 的 TodoApp 数据库。

尝试一下:按照本文的步骤,创建你的第一个Todo数据库。如果你在操作过程中遇到问题,欢迎在评论区留言告诉我!

关注我的公众号,下期继续深入,打通 API 与数据库的最后一公里。把 TodoApp 做成一个完整可上线的项目~


-------- 写在最后 --------

关注我,每天1分钟,轻松懂 Python

我的同名公众号正在连载《FastAPI 开发实战》、《Python 核心技术》、《职场》。


点赞 :支持技术分享!

分享 :分享给身边的朋友!

关注我 :获取更多FastAPI实战技巧!


#Python #FastAPI #API #Web开发 #程序员 #编程教程 #效率提升 #后端开发 #API设计 #参数验证