We saw this diagram earlier in the book, as an illustration of the key principles behind Spring Python.
The DatabaseTemplate represents a Portable Service Abstraction because:
It is portable because it uses Python's standardized API, not tying us to any database vendor. Instead, in our example, we injected in an instance of Sqlite3ConnectionFactory
It provides the useful service of easily accessing information stored in a relational database, but letting us focus on the query, not the plumbing code
It offers a nice abstraction over Python's low level database API with reduced code noise. This allows us to avoid the cost and risk of writing code to manage cursors and exception handling
Note
DatabaseTemplate handles exceptions by catching and holding them, then properly closing the cursor. It then raises it wrapped inside a Spring Python DataAccessException. This way, database resources are properly disposed of without losing the exception stack trace.