郭震 AI公众号:郭震AI

28 使用数据库之SQLAlchemy连接数据库

发布日期:

分类: FastAPI教程

预计阅读: 2 分钟

阅读次数: 0

预计阅读2 分钟
结构重点4 个
图文要点0 张
正文规模865 字

在上一篇中,我们探讨了 FastAPI 的中间件与依赖注入,理解了如何使用全局依赖与路径依赖来管理请求中的共享资源。本篇将重点讲解如何在 FastAPI 应用中使用 SQLAlchemy 连接到数据库,以便进行数据持久化。

安装依赖

首先,您需要确保安装了 FastAPI 和 SQLAlchemy。可以使用 pip 安装所需的库:

pip install fastapi[all] sqlalchemy databases
  • fastapi[all]: 包含 FastAPI 的所有功能。
  • sqlalchemy: Python 的 SQL 工具包和对象关系映射器。
  • databases: 一个异步数据库库,适用于 SQLAlchemy。

创建数据库模型

接下来,我们需要定义我们的数据库模型。假设我们正在创建一个简单的用户管理系统,用户具有 idnameemail 三个属性。

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "sqlite:///./test.db"  # 使用 SQLite 数据库

# 创建数据库引擎
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})

# 创建会话
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 创建基本模型类
Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    email = Column(String, unique=True, index=True)

# 创建数据库表
Base.metadata.create_all(bind=engine)

在上面的代码中,我们定义了一个 User 模型,并使用 SQLAlchemy 的 declarative_base 创建基础模型类。然后,我们通过调用 Base.metadata.create_all(bind=engine) 创建了数据库中对应的表。

数据库连接的依赖注入

在 FastAPI 中,使用依赖注入来管理数据库会话是一种简洁而有效的方法。下面的代码展示了如何为 FastAPI 应用配置数据库会话的依赖项:

from fastapi import FastAPI, Depends, HTTPException

app = FastAPI()

# 依赖项:获取数据库会话
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

在这里,get_db 函数定义了一个生成器,它创建了一个数据库会话并在请求结束时自动关闭会话。

结论

到目前为止,我们已经定义了数据库模型并设置了 SQLAlchemy 连接。通过依赖注入,我们也准备好了数据库会话的管理。接下来的章节,我们将深入探讨如何在此基础上实现基本的 CRUD 操作,这是数据管理系统中的重要环节。

如果您在中间件与依赖注入的上下文中考虑数据库连接,那么这个简单的依赖注入实现能够让数据库连接在请求的生存期内保持有效,同时确保在请求完成后能正确关闭连接。

接下来,我们将讨论如何执行基本的 CRUD 操作,进一步完善我们的用户管理系统。请继续关注本系列教程!

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关内容

更多相关文章

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...