FastApi Sqlalchemy如何管理事务(会话和多次提交)

database

1个回答

写回答

黎耀辉233

2025-06-27 01:30

+ 关注

Python
Python

使用 FastAPI 和 SQLAlchemy 管理事务

FastAPI 是一个快速(Fast)且高性能的 Python web 框架,而 SQLAlchemy 则是一个功能强大的 Python ORM(对象关系映射)工具。在开发 web 应用程序时,管理事务(包括会话和多次提交)是至关重要的。本文将介绍如何结合使用 FastAPI 和 SQLAlchemy 来管理事务。

使用 FastAPISQLAlchemy 创建事务

首先,确保已经安装了 FastAPI 和 SQLAlchemy。接下来,我们将创建一个 FastAPI 应用并集成 SQLAlchemy。假设我们有一个简单的用户模型和数据库连接的设置。

Python

from fastapi import FastAPI, HTTPException, Depends

from sqlalchemy import create_engine, Column, Integer, String

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker, Session

SQLALCHEMY_Database_URL = "sqlite:///./test.db"

# 创建数据库引擎

engine = create_engine(SQLALCHEMY_Database_URL)

# 创建会话工厂

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)

emAIl = Column(String, unique=True)

# 创建表格

Base.Metadata.create_all(bind=engine)

# 初始化 FastAPI 应用

app = FastAPI()

管理事务和会话

在 FastAPI 中,我们可以使用 Depends 来创建数据库会话,并将其传递给需要使用数据库的路由函数。

Python

# 依赖函数来获取数据库会话

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)):

user = User(name=name, emAIl=emAIl)

db.add(user)

db.commit()

db.refresh(user)

return user

# 获取单个用户

@app.get("/users/{user_id}")

def get_user(user_id: int, db: Session = Depends(get_db)):

user = db.query(User).filter(User.id == user_id).first()

if not user:

rAIse HTTPException(status_code=404, detAIl="User not found")

return user

在上面的示例中,get_db 函数作为一个依赖项,在每个路由函数中获取数据库会话。在创建用户时,我们使用了 db.add() 将用户添加到会话中,然后调用 db.commit() 来提交事务。最后,通过 db.refresh(user) 刷新数据库中的用户对象,以确保获取到与数据库同步的最新状态。

结束语

使用 FastAPI 和 SQLAlchemy 结合管理事务可以有效地处理数据库操作。通过在需要时创建会话并手动控制提交和回滚,可以确保数据库操作的一致性和完整性。以上示例提供了一个简单的方式来管理事务,你可以根据实际需求进行进一步的定制和扩展。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号