[DB-SIG] checking column types from cursor object in a database-independent way?

Dan Lenski dlenski at gmail.com
Fri Apr 19 19:56:43 CEST 2013


Hi,
I have to dump some data from various databases (Oracle and Postgre, at the 
moment) into CSV files, while preserving the column type information so the 
data can be correctly loaded into another application.  Basically, I need to 
write a function that can distinguish string/numeric data in the columnar data 
from a cursor object in a fashion that's independent of the particular DBAPI 
module in use.

According to PEP-0249, each DBAPI module has to define type objects (e.g. 
module.STRING) which "must compare equal to" the type objects in the cursor 
object for each column.

The problem I'm having is... how can I figure out what are the appropriate 
type objects for this comparison if I *only* have access to the cursor object? 
I've been using an ugly kludge so far, to get a handle on the right DBAPI 
module:

    mod = sys.modules[cur.connection.__class__.__module__] #FIXME!
    if cur.description[0][1] == mod.STRING:
        print "first column is STRING data type"

Is there a more robust and elegant solution to this?  It seems like there 
ought to be a module-independent way to introspect the column data types in 
the cursor object.

Thanks,
Dan Lenski



More information about the DB-SIG mailing list