In general, you should stick to the published DB-API specification when writing database code in Python. There will be some instances, however, when you may need access to MySQL-specific functionality. MySQLdb is actually built on top of the MySQL C API and exposes that API to programs that wish to use it. This ability is particularly useful for applications that want metadata about the MySQL database.
Basically, MySQLdb exposes most C methods except those governing
result set processing, because cursors are a better interface for
that functionality. Example 10-2 shows a trivial
application that uses the
methods from the C API to loop through all the tables in all the
databases on the MySQL server and print out the first row from each
table. Needless to say, do not run this application against a
import MySQLdb; conn = None; try: conn = MySQLdb.connect(host="carthage", user="test", passwd="test", db="test"); for db in conn.list_dbs( ): for tbl in conn.list_tables(db): cursor = conn.cursor( ); cursor.execute("SELECT * FROM " + tbl); print cursor.fetchone( ); cursor.close( ); except: if conn: conn.close( );
Chapter 20 lists the proprietary APIs exposed by MySQLdb.