Start here. This is the direct spoken answer to practice first.
Overview
Separates SQLAlchemy connectivity, checked-out database resources, ORM state, and transaction ownership.
A SQLAlchemy Engine is the long-lived entry point to a database and normally owns the connection pool. A Connection represents one checked-out database connection and lets Core statements run within its transaction context. A Session sits above that for ORM work: it tracks mapped objects, maintains an identity map, coordinates flushes, and works through a database transaction. I usually share the engine and session factory, but create short-lived connections or sessions for each unit of work.