如何在 FastAPI RealWorld 示例应用程序中应用事务逻辑?
How to apply transaction logic in FastAPI RealWorld example app?
我正在使用 nsidnev/fastapi-realworld-example-app。
我需要将交易逻辑应用到这个项目。
在一个 API 中,我从存储库中调用了很多方法,并在许多表中进行了更新、插入和删除操作。如果其中任何一个操作出现异常,我该如何回滚更改?
(或者如果一切正确则提交。)
nsidnev/fastapi-realworld-example-app is using asyncpg.
有两种使用方式Transactions。
1。 async with
声明
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
语句
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)
.
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:
我正在使用 nsidnev/fastapi-realworld-example-app。
我需要将交易逻辑应用到这个项目。
在一个 API 中,我从存储库中调用了很多方法,并在许多表中进行了更新、插入和删除操作。如果其中任何一个操作出现异常,我该如何回滚更改? (或者如果一切正确则提交。)
nsidnev/fastapi-realworld-example-app is using asyncpg.
有两种使用方式Transactions。
1。 async with
声明
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
语句
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)
.
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: