Start here. This is the direct spoken answer to practice first.
Overview
Makes AsyncSession transaction ownership and every database I/O point explicit.
An AsyncSession represents mutable state for one transaction and is not safe to share across concurrent tasks. Passing it to several operations inside asyncio.gather() can interleave transaction and connection state. Async ORM code also cannot safely trigger arbitrary database work through ordinary attribute access. A lazy or expired relationship can therefore raise MissingGreenlet when SQLAlchemy attempts I/O outside the expected awaitable path.