[DB-SIG] Preparing statement API

M.-A. Lemburg mal@lemburg.com
Wed, 26 Jan 2000 10:22:05 +0100

Hrvoje Niksic wrote:
> "M.-A. Lemburg" <mal@lemburg.com> writes:
> > >     statement = cur.prepare("INSERT INTO foo (user, name) VALUES (?, ?)")
> [...]
> > The problem with this approach is that you'd have to store the
> > perpared information somewhere.  This is usually done by the cursor
> > which is not under Python's control.
> You'd store it (or a pointer to it) in the statement object, returned
> by cursor.prepare().  Given that prepare() is a cursor method, the
> cursor can be made aware of each such object.
> > cursor.prepare(operation)
> >          Prepare a database operation (query or command) statement for
> >          later execution and set cursor.command. To execute a prepared
> >        statement, pass cursor.statement to one of the .executeXXX()
> >        methods.
> >
> > cursor.command
> >          Provides access to the current prepared SQL command available
> >          through the cursor. This is set by .prepare(), all catalog
> >        methods, .execute() and .executemany().
> This is very close to what I proposed, except that my cursor.prepare()
> returns the statement (which you provide through cursor.command).
> This allows one to prepare more than one statement using one cursor.

Maybe this is just an ODBC thing, but you cannot prepare more
than one statement on a cursor (in ODBC the notion of cursors
is captured by the HSTMT or statement handle). For ODBC, your
.prepare() function would have to return a new cursor.

Marc-Andre Lemburg
Business:                                      http://www.lemburg.com/
Python Pages:                           http://www.lemburg.com/python/