[DB-SIG] PEP 249

James Henstridge james at jamesh.id.au
Wed Jan 23 08:31:39 CET 2008


On 23/01/2008, Konjkov Vladimir <konjkov.vv at gmail.com> wrote:
> When I'm implementin on C my Python module that are used to access
>  ODBC 2.0 database, I can't found description in PEP-0249 about the
>  case when one .executeXXX follows another on the same cursor object.
>
>  I think that after .executeXXX cursor can only be
>  fetchedXXX or closed. Reexecution permited and raised exception.
>  That's because .executeXXX method calling SQLPrepare and
>  and next SQLPrepare posible only when SQLCloseCursor() or
>  SQLFreeStmt() with the SQL_CLOSE option called.

The idea is that on .execute(), the database adapter could prepare the
statement and execute it.  The cursor would keep the prepared
statement around afterwards.

On a subsequent .execute() call, if the statement is identical it can
use the previously prepared statement.  If not, then it discards the
prepared statement and creates a new one.


>  But on C-level reexecution is posible.
>
>  "Once the application has processed the results from the SQLExecute() call,
>  it can execute the statement again with new (or the same) parameter
> values."
>
>  Problem is that no .Prepare(Statement) method is not present in Cursor
> oblect.

Use of prepared statements is implicit, if the database adapter uses
them at all.


>  I think it will be better if connection method of cursor have to do the
>  SQLPrepare and only prepare the statemnet when creatin new python cursor
> object
>  C = cnxn.cursor(STATEMENT),
>  and C.execute([parameters]) will only execute or reexecute the statemnet
>  with optional parameters list.

What benefits do you see from this design over the existing one?

James.


More information about the DB-SIG mailing list