[DB-SIG] db module wrapper

Randall Smith randall at tnr.cc
Wed Aug 18 22:22:43 CEST 2004


I have created a db module wrapper for hiding the differences between 
the DB API 2 implementations.  I currently testing it on psycopg and 
cx_Oracle.  Some of the things I have done are:

* Standardize time objects to use Python datetime.datetime and 
datetime.date classes for both input and output.  The module converts 
between types transparently.  This is working on both psycopg and cx_Oracle.

* Standardize the params input to use the ? operator and a list.  The 
module translates input params and query into the one appropriate for 
the  native module.  For example with cx_Oracle: "Select foo from table 
where goo > ?" with params [myparam] converts to "Select foo from table 
where goo > :var1" with params {'var1':myparam}.  This is working with 
both psycopg and cx_Oracle.

* In addition, I also used Kevin Jacob's db_row module to give access by 
name to the rows returned from a query.

Features can be turned off.

First of all, am I reinventing the wheel here?  Does a wrapper already 
exist that hides API implementation differences?  Second, do you have 
any suggestions for standardizing?  I used the ? operator for params. 
Is there a better option?  How do you feel about using the datetime 
module?  I know it is not available in earlier versions of Python, but I 
want to stay in the Python standard library if possible.  I would love 
feedback.

Randall


More information about the DB-SIG mailing list