The name of the project MySQL for Python is the current version of a project that began under the rubric
MySQLdb. Consequently, unlike most Python modules, the MySQL for Python module is not called by its name, but by its historic handle. To import the module, insert the following into a Python program or simply type it in a following Python shell:
To make working with the module easier, you can also import it with an alias:
import MySQLdb as mysql
This allows us to use mysql instead of
MySQLdb when we access parts of the module.
When you do this, several things will occur. You need not be concerned about most of them, but you should be aware that
MySQLdb depends upon a module called
_mysql. The _mysql module is largely a Python adaptation of the MySQL C API.
This is important to note because it is this API that you will access through MySQL for Python.
MySQL for Python is a wrapper for accessing the
_mysql API. A wrapper is essentially a system of macros, or trusted code, that allows you to do common tasks quickly. It allows you to program without having to repeat commonly used or accessed variables and functions. The
_mysql module is a powerful and proven way of accessing a MySQL database. However, controlling it within a Python program can pose a challenge for some, like driving a Formula 1 car for the first time. So consider MySQL for Python as a system that allows you to harness the power of a Formula 1 racing car even if you're merely driving a Hyundai.
Unlike some systems of macros, MySQL for Python still allows you to access the classes and functions of
_mysql. This is due to the nature of Python's
Accessing online help when you need it
As with other modules, Python is able to provide online help about MySQL for Python. In the following sections, we look at the
MySQLdb and _mysql modules in greater depth using Python's built-in
MySQLdb, you can read over the documentation that accompanies the module. In a Python shell, type:
You will then see a manual page detailing all of the functions and classes of MySQL for Python. It is well worth giving this a cursory read to familiarize yourself with the module. In the course of this book, we will cover most of these items from various angles.
As the help page indicates,
MySQLdb includes the following modules:
- connections: Initiating, maintaining, and closing a connection to MySQL
- cursors: Managing the execution of queries
- converters: For converting between MySQL data types as well as between data types in MySQL and Python
- times: Converting date and time values between MySQL and Python
Each of these is abstracted to the point of its own module in the source tree. Without a doubt, the most important part of the module is connections.py, without which we could not interface with MySQL. Where the others are static, the conversion module, convertors.py, allows you to define your own convertor on-the-fly.
MySQLdb module itself has only one operating class that does not pertain to errors - DBAPISet. This is MySQLdb's internal object class for processing data. To interface with MySQL, however, we use functions. Of the several listed at the end of the
MySQLdb help page, one uses
connect() in every
At first glance, it may here be confusing to see that
MySQLdb seems to have three ways of connecting with a database. In the list of functions, these are as follows:
Knowing the ins and outs of these functions is not necessary. It is, however, important to know that they exist and to recognize that the latter two are simply different ways of transferring data to the first.
Connect() then passes the arguments to the connections.
MySQLdb's MySQL database connection class, in the
In looking over the module, you may also note that reference is made to the _mysql module, but it is not explicitly detailed. This is because it is a dependency and not part of the module itself. However, you can access the documentation for
_mysql without importing it directly by using the
In the previous discussion about
connections.Connection(), we stopped following the trail of the connection and any ensuing data transmission where
MySQLdb stopped. In reality, however, the data does not stop there. When a connection or operational request is received by
connections.Connection(), it is processed and passed to
_mysql and subsequently to the MySQL API in C to perform it.
To handle this interface,
_mysql uses two classes:
The first is used to establish communication with MySQL and thus returns a
connection object. The second, as the name implies, returns a set containing the results from a MySQL command that a program sends. These results can be either the query results or an error.
_mysql naturally passes the error to the calling process. In the case of
MySQLdb, we then have a comprehensive toolbox to handle the errors that may arise.