Estoy usando nsidnev/fastapi-realworld-example-app .
Necesito aplicar la lógica de transacción a este proyecto.
En una API, llamo a muchos métodos de los repositorios y realizo operaciones de actualización, inserción y eliminación en muchas tablas. Si hay una excepción en alguna de estas operaciones, ¿cómo puedo revertir los cambios? (O si todo es correcto, confirme).
nsidnev/fastapi-realworld-example-app está usando asyncpg .
Hay dos formas de usar Transacciones .
async with declaración 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 Exceptionstart , rollback y 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 en rutas Inyectar 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: