iam-abbas / FastAPI-Production-Boilerplate

A scalable and production ready boilerplate for FastAPI
MIT License
430 stars 66 forks source link

Question: What is the difference between the two Propagation types? #17

Open pjohnmeyer opened 1 month ago

pjohnmeyer commented 1 month ago

In the @Transactional annotation, the code supports two Propagation types: REQUIRED and REQUIRED_NEW. The only difference appears to be that REQUIRED_NEW starts a session, whereas REQUIRED assumes one is already started. The commit log / documentation did not help me understand which one I should use, under what circumstances. Can you help?

Thanks!

Shivam6033 commented 1 week ago

hey @pjohnmeyer When you create an AsyncSession object, it automatically begins a transaction. This means that any database operations performed within the session will be executed as part of a single, atomic unit. However if you don't want the transaction to be executed in the same transaction context you can use REQUIRED_NEW. e.g. Suppose your transaction invokes multiple transactions and you don't want the complete transaction to roll back even if some of the transaction fails. In such case you can use REQUIRED_NEW for those low priority transaction.