FastAPI与SQLAlchemy Session的详解

2024年10月02日 FastAPI与SQLAlchemy Session的详解 极客笔记

FastAPI与SQLAlchemy Session的详解

在构建Web应用程序时,很多情况下我们需要和数据库进行交互,对数据进行增删改查操作。FastAPI是一个高性能的现代web框架,而SQLAlchemy是一个Python SQL工具包和ORM框架,提供了方便的以Python对象形式操作数据库的能力。在本文中,我们将探讨如何在FastAPI应用中使用SQLAlchemy Session来进行数据库操作。

1. 安装FastAPI和SQLAlchemy

首先,我们需要安装FastAPI和SQLAlchemy以及相应的数据库驱动程序。可以使用以下命令来安装这些依赖:

pip install fastapi
pip install sqlalchemy
pip install databases

在这里,我们还安装了databases,它是用于异步数据库操作的库,能够方便地与FastAPI和SQLAlchemy配合使用。

2. 创建SQLAlchemy引擎和Session

在使用SQLAlchemy进行数据库操作之前,我们需要先创建一个SQLAlchemy引擎,然后通过引擎创建一个Session。下面是一个创建Session的示例代码:

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

# 连接数据库的URL
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

# 创建SQLAlchemy引擎
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})

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

# 创建基类
Base = declarative_base()

在上面的示例中,我们首先定义了连接的数据库URL,然后使用create_engine函数创建了一个SQLAlchemy引擎。接着通过sessionmaker函数创建了一个SessionLocal类,它将被我们的FastAPI应用程序使用来进行数据库操作。最后,我们创建了一个基类Base,这将用于定义数据库模型。

3. 创建数据库模型

在实际的应用中,我们需要定义数据库模型来映射数据库中的表结构。下面是一个简单的示例,展示如何使用SQLAlchemy创建一个用户模型:

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import Session

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)

在上面的示例中,我们定义了一个User类,它继承自Base基类。__tablename__属性指定了在数据库中对应的表名,而idnameemail则是表中的列。通过在User类中定义这些属性,我们已经定义了一个名为”users”的数据库表。

4. 使用Session进行数据库操作

有了引擎和数据库模型后,我们就可以使用Session进行数据库操作了。下面是一个简单的示例,展示如何向数据库中添加一个用户:

def create_user(db: Session, name: str, email: str):
    new_user = User(name=name, email=email)
    db.add(new_user)
    db.commit()
    db.refresh(new_user)
    return new_user

在上面的示例中,create_user函数接受一个Session实例db以及用户的名字和邮箱作为参数。首先创建一个新的User对象new_user,然后通过调用db.add将其添加到数据库中。接着调用db.commit提交事务,最后调用db.refresh刷新new_user对象,以确保我们获取到了数据库中新添加的用户信息。

5. 在FastAPI应用中使用Session

在FastAPI应用中使用Session非常简单,我们只需在需要进行数据库操作的地方获取Session实例即可。下面是一个完整的示例,展示如何在FastAPI应用中定义一个添加用户的接口:

from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import SessionLocal, engine
from models import User
import crud

app = FastAPI()

# 依赖注入,用于获取数据库Session
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

# 添加用户接口
@app.post("/users/")
def create_user(name: str, email: str, db: Session = Depends(get_db)):
    return crud.create_user(db=db, name=name, email=email)

在上面的示例中,我们首先创建了一个FastAPI应用app,然后定义了一个get_db函数,通过Depends注解将其标记为依赖注入。在create_user接口中,我们使用Depends(get_db)来获取数据库Session,然后调用crud.create_user函数进行添加用户操作。

6. 总结

通过本文的介绍,我们了解了如何在FastAPI应用中使用SQLAlchemy Session来进行数据库操作。首先创建了SQLAlchemy引擎和Session,然后定义了数据库模型,并编写了使用Session进行数据库操作的函数。最后,我们展示了如何在FastAPI应用中获取Session实例,并完成了一个简单的添加用户的接口。

本文链接:http://so.lmcjl.com/news/14465/

展开阅读全文