2024年10月02日 FastAPI与SQLAlchemy Session的详解 极客笔记
在构建Web应用程序时,很多情况下我们需要和数据库进行交互,对数据进行增删改查操作。FastAPI是一个高性能的现代web框架,而SQLAlchemy是一个Python SQL工具包和ORM框架,提供了方便的以Python对象形式操作数据库的能力。在本文中,我们将探讨如何在FastAPI应用中使用SQLAlchemy Session来进行数据库操作。
首先,我们需要安装FastAPI和SQLAlchemy以及相应的数据库驱动程序。可以使用以下命令来安装这些依赖:
pip install fastapi
pip install sqlalchemy
pip install databases
在这里,我们还安装了databases
,它是用于异步数据库操作的库,能够方便地与FastAPI和SQLAlchemy配合使用。
在使用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,这将用于定义数据库模型。
在实际的应用中,我们需要定义数据库模型来映射数据库中的表结构。下面是一个简单的示例,展示如何使用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__
属性指定了在数据库中对应的表名,而id
、name
和email
则是表中的列。通过在User类中定义这些属性,我们已经定义了一个名为”users”的数据库表。
有了引擎和数据库模型后,我们就可以使用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
对象,以确保我们获取到了数据库中新添加的用户信息。
在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
函数进行添加用户操作。
通过本文的介绍,我们了解了如何在FastAPI应用中使用SQLAlchemy Session来进行数据库操作。首先创建了SQLAlchemy引擎和Session,然后定义了数据库模型,并编写了使用Session进行数据库操作的函数。最后,我们展示了如何在FastAPI应用中获取Session实例,并完成了一个简单的添加用户的接口。
本文链接:http://so.lmcjl.com/news/14465/