[PEAK] bulletins example OF DOOM

Phillip J. Eby pje at telecommunity.com
Mon Apr 12 09:40:44 EDT 2004


At 08:25 PM 4/9/04 -0400, Stephen Waterbury wrote:
>Phillip J. Eby wrote:
>
>>... it's an issue with the DBAPI module, as you can see below:
>>
>>>AttributeError: 'module' object has no attribute 'DATE'
>
>>Check the 'supportedTypes' list you've defined (or inherited).  It seems 
>>you've subclassed from a connection type for a Postgres driver with a 
>>'DATE' type, but the driver you're using either doesn't support it, or 
>>calls it something else.  (Welcome to the wonderful world of Python DBAPI 
>>implementations.)
>
>I went back and changed 'DATE' in my
>p.storage.SQL.pyPgSQLConnection.supportedTypes
>(which I had copied from PsycopgConnection)
>to 'Date' (as it's spelled in the DBAPI spec), and
>sure enough, I got a different traceback.
>Progress ... :)

No, you don't have progress.  'Date' is not a DBAPI type constant.  By 
convention, they're all-uppercase like NUMBER, TIMESTAMP, etc.  Look in 
your DBAPI module for *only* such constants, and make sure your 
supportedTypes list matches.

The second thing you need to do is verify whether your DBAPI module uses a 
'values' attribute on its type objects (such as INTEGER), in which case you 
may need to redefine the 'typeMap' method to handle type objects 
differently.  In the worst case, you can simply do this:

typeMap = binding.Make(dict)

to disable all type conversion for your driver.  The typeMap is supposed to 
be a dictionary of DBAPI type objects (i.e. values that can appear in a 
cursor's 'description' attribute) containing application-specific type 
conversion functions.  This is used to give you some database independence 
as well as convenient conversion to your app's data types.  For example, 
one will often want to convert DB-specific timestamp types to Python's 
datetime type.




More information about the PEAK mailing list