Start here. This is the direct spoken answer to practice first.
Overview
Defines one explicit SQLAlchemy session and transaction owner for each request, job, thread, or async task.
A SQLAlchemy Session is mutable state for one database transaction, so I do not share it across concurrent threads. The same rule applies to AsyncSession: one instance should not be used by several concurrent tasks. I create a session from a shared factory for one request, command, or job, pass it through that unit of work, then commit or roll back and close it reliably with a context manager.