On Fri, Apr 19, 2013 at 11:46 AM, Michael Bayer
<mike...@zzzcomputing.com> wrote:
>
> On Apr 19, 2013, at 1:56 PM, Dan Lenski <dlen...@gmail.com> wrote:
>
>> 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?
>
>
> Basically I'd question that precondition.   I'd look into how the system is 
> architected such that only a cursor is passed around, and try to substitute 
> it/augment it with some kind of contextual object; either an object that can 
> refer back to the DBAPI types, or even the DBAPI module itself.    You can't 
> really assume that ".connection" is present, nor that the Connection class of 
> the DBAPI is in the same module space as where the type objects are defined.  
>  I'd rework the system and refuse the temptation to guess.

I agree that my solution is not a good one... just a quick hack which
seems to work for the modules that I've tried so far.

However, it seems to me that the precondition is a reasonable one: the
cursor object provides a DB-independent means of obtaining the data
from a query, so why not the metadata as well?  Actually, the DBAPI is
pretty good in that regard, because it does establish the different
type objects which a module must provide... but doesn't give a clear
way to *find* those type objects from the cursor object.  This makes
it difficult to write truly DB-independent code to manipulate cursor
objects.

I *could* pass around a handle to the DB module along with the cursor
itself, as you've suggested, but that seems redundant and error-prone
to me.  To my mind, this is a small gap in the DBAPI design:
  (1) DBAPI does specify a set of module-dependent type objects
against which column type objects are to be compared
  (2) DBAPI does specify a cursor object which will produce column
type objects after a query is executed
  (3) DBAPI *doesn't* provide any way to get from the cursor object to
the module-defined type objects, at least not without passing  around
module-dependent object.

Dan
_______________________________________________
DB-SIG maillist  -  DB-SIG@python.org
http://mail.python.org/mailman/listinfo/db-sig

Reply via email to