python + ODBC + Oracle + MySQL - money
Gerhard Häring
gh at ghaering.de
Thu Nov 10 12:15:49 EST 2005
Grig Gheorghiu wrote:
> In my testing, I need to connect to Oracle, SQL Server and DB2 on
> various platforms. I have a base class with all the common code, and
> derived classes for each specific database type using specific database
> modules such as cxOracle, mxODBC and pyDB2. The derived classes are
> pretty thin, containing only some syntax peculiarities for a given
> database type. The code is clean and portable.
So maybe you're lucky that all your database modules use the same access
to query parameters. MySQLdb and cx_Oracle would be different in that
MySQLdb has paramstyle = "format" and cx_Oracle has paramstyle =
"qmark/named", i. e. to query a specific record of the person table you
would use
p_id = 4711
cur.execute("select firstname from person where person_id=%s", (p_id,))
using MySQLdb, and:
cur.execute("select firstname from person where person_id=?", (p_id,))
using cx_Oracle.
Now, probably a lot of people have written wrappers for DB-API modules
that translate one paramstyle to the other. The most sensible solution
is to translate the format/pyformat one to others.
Often, one other solution is to use a higher-level database interface
uses your database modules internally, but has the same consistent
interface for the outside.
In my recent evaluations, I liked PyDO2 for this
(http://skunkweb.sourceforge.net/pydo2.html). Unlike SQLObject, it is
able to use MySQL and Oracle now, though there is work underway to add
Oracle support to SQLObject.
OTOH, the advice to use MySQLdb and cx_Oracle directly is probably a
good one, especially for a newcomer to Python. It's a good way to learn
Python and learning the Python DB-API is a good idea if you want to do a
database application in Python. You can use higher-level interfaces (or
write them yourself) later on.
And if this is serious work with business value, then just buying a
mxODBC license and go on with the real problem is probably the most
sensible solution.
You can use the time saved for learning Python, then, which is perhaps
more fun :-)
Cheers,
-- Gerhard
More information about the Python-list
mailing list