Shelves are a powerful tool; they allow scripts to throw Python objects on a keyed-access file and load them back later in a single step. They aren’t quite a full-blown database system, though; objects (records) are accessed with a single key, and there is no notion of SQL queries. It’s as if shelves were a database with a single index and no other query-processing support.
Although it’s possible to build a multiple-index interface to
store data with multiple shelves, it’s not a trivial task and
requires manually coded extensions (see the
dbaseindexed module in the PyErrata system near
the end of Chapter 14 for a prototype of this
For industrial-strength persistence needs, Python also supports relational database systems. Today, there are freely available interfaces that let Python scripts utilize all common database systems, both free and commercial: Oracle, Sybase, Informix, mSql, MySql, Interbase, Postgres, ODBC, and more. In addition, the Python community has defined a database API specification that works portably with a variety of underlying database packages. Scripts written for this API can be migrated to different database vendor packages with minimal or no source code changes.
Unlike all the persistence topics presented in this chapter and book so far, though, SQL databases are optional extensions that are not part of Python itself, and you need to know SQL to make the most sense of their interfaces. Because I don’t ...