This module should be mostly compatible with an older interface written by Joe Skinner and others. However, the older version is a) not thread-friendly (database operations could cause all other threads to block), b) written for MySQL 3.21 (does not compile against newer versions without patches), c) apparently not actively maintained. MySQLdb is a completely new module, distributed free of charge under a license derived from the Python license.
This module is developed on RedHat Linux (currently 7.0)
for Intel. It should build without
much trouble on most platforms by using the setup.py
script.
Supposedly it builds on MacOS X.
Be aware that you need the Distutils package which comes with
Python 2.0. If you don't have it (i.e. you have Python 1.5.2), you
can find it over at
www.python.org.
Windows is not a supported platform.
However, the setup.py
script
reportedly gets the job done.
There is probably a link on the web page for getting a precompiled
Windows installer from someone or other.
Be aware that this is a user-contributed package; the author
cannot help you with compiling and running under Windows.
MySQLdb requires Python 1.5.2. Earlier versions will not work, because
support for C long long
is required by MySQL. If you have an
earlier version of Python, upgrade to 1.5.2 or beyond.
Only versions 3.22.32 and up are guaranteed to work. Some older versions may work; if you have an older version you should seriously consider upgrading to get the bug fixes and particularly the security updates.
MySQL-3.22 seems to have a problem trying to insert TIME
values with fractional seconds. Values like 12:56:13.00 are
returned as 344:13:00, apparently interpreting the original input
as 12 days, 56 hours, 13 minutes, 0 seconds. (12 days and 56 hours
is 344 hours.) To avoid this problem, use the DateTimeDelta
type.
MySQL-3.23 is presently in gamma (stable prerelease). Several API
additions have been made so far. These will be incorporated into
MySQLdb as work progresses. As of 3.23.30, transactions are supported
in MySQL using BDB tables. MySQLdb (0.3.0 and up) detects the
presence of BDB table support
upon connection and will issue COMMIT
and ROLLBACK
statements when appropriate. Note that MySQL operates in
AUTOCOMMIT
mode by default; you will have to issue SQL to
change this.
If you have the DateTime module installed (recommended), MySQLdb will use it for date-related objects. Otherwise, these will be returned to Python as strings. You can also modify the type conversion dictionaries to return these as other object classes, if you prefer.
MySQLmodule, the older MySQL interface by Joe Skinner and others,
is also a split C/Python
interface. MySQL
, the C portion, has an interface similar to
perl's DBI internally. In addition, there is Python portion, Mysqldb
,
which provides a DB API v1.0 interface, written by James Henstridge.
MySQLdb-0.2.2 and up include CompatMysqldb
, which is an adaptation
of Mysqldb
to _mysql
. It should be considered experimental.
In contrast, MySQLdb's C portion,
_mysql
, is designed
to mimic the MySQL C API in an object-oriented way; you should not
expect to move from MySQL
to _mysql
without a fair amount of
work.
MySQLdb
provides a DB API v2.0 interface,
which has some changes from the v1.0 interface. Things to watch out
for in particular:
Operation | Mysqldb | MySQLdb |
Connecting | db = Mysqldb.Mysqldb("db@host user pass") | db = MySQLdb.connect(db='db', host='host', user='user', passwd='pass') |
Implicit cursor | db.execute(SQL) | implicit cursors dropped from DB API v2.0; always use c = db.cursor() |
Fetch row as dictionary | c.fetchDict() ,keys are "table.column" | not standard; alternate cursor class DictCursor provides a dictionary interface,keys are "column" or "table.column" if there are two columnswith the same name; use SQL AS to rename fields. |
Transactions | db.commit() and db.rollback() both exist and silently do nothing
(danger!) | db.commit() and db.rollback() work if the MySQLserver can perform transactions; otherwise db.rollback() always fails
|
I wrote a ZMySQLDA for use with MySQLdb.
The web page documentation may be slightly ahead of the latest release and may reflect features of the next release.
A FAQ is available at http://dustman.net/andy/python/MySQLdb/faq/MySQLdb-FAQ.html.