On Wed, 6 Sep 2006, Federico Di Gregorio wrote:

>> - server side cursors. Currently, most bindings for most databases have to
>> decide what to do after an cursor.execute() call - do they automatically
>> retrieve all the resulting rows in the client's memory, or do they
>> retrieve it row by row, pinging the server before every retrieval to get
>> more data (hey, not everybody using Oracle ;^). DB API has no support
>> for controlling this in a consistent fashion, even though Python has
>> solved the issue of dict.items() vs dict.iteritems() a long time ago.
>> The application writers should have a choice on how the cursors will
>> behave.
>
> Sure. psycopg 2 uses a little extension to the dbapi and adds to
> cursor() an extra parameter: "name". If a cursor is named then a server
> side cursor with that name is automatically generated (and destroyed at
> the end of the current transaction) else, if name is None, a normal
> cursor is created. Then fetchXXX() methods do the right thing without
> the need to introduce extra methods.

I did not go that rounte because of the potential confusion on named 
parameters:
      cu.execute("select * from products "
                 "where pname =:name and store =:store",
                name = "foo", store = 37)

That - to me - feels much more natural, and makes it easy for the 
execute() method to treat both *args and **kwargs simply as bind 
parameters.

Cristian
-- 
Cristian Gafton
rPath, Inc.

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

Reply via email to