首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在FastAPI RealWorld示例应用程序中应用事务逻辑?

问如何在FastAPI RealWorld示例应用程序中应用事务逻辑?
EN

Stack Overflow用户
提问于 2021-11-17 10:29:53
回答 1查看 974关注 0票数 8

我正在使用nsidnev/现实世界-示例-应用程序。

我需要将事务逻辑应用于这个项目。

在一个API中,我从存储库调用许多方法,并在许多表中进行更新、插入和删除操作。如果这些操作中都有异常,我如何回滚更改?(或者,如果一切都正确,那么提交。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-19 16:23:29

nsidnev/现实世界-示例-应用程序正在使用异步。

使用交易记录有两种方法。

1. async with语句

代码语言:javascript
复制
async with conn.transaction():
    await repo_one.update_one(...)
    await repo_two.insert_two(...)
    await repo_three.delete_three(...)

    # This automatically rolls back the transaction:
    raise Exception

2. start、rollback、commit语句

代码语言:javascript
复制
tx = conn.transaction()
await tx.start()

try:
    await repo_one.update_one(...)
    await repo_two.insert_two(...)
    await repo_three.delete_three(...)
except:
    await tx.rollback()
    raise
else:
    await tx.commit()

在路由中获取连接conn

注射conn: Connection = Depends(_get_connection_from_pool)。

代码语言:javascript
复制
from asyncpg.connection import Connection
from fastapi import Depends

from app.api.dependencies.database import _get_connection_from_pool


@router.post(
    ...
)
async def create_new_article(
    ...
    conn: Connection = Depends(_get_connection_from_pool),  # Add this
) -> ArticleInResponse:
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70002709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档