[DB-SIG] Improved support for prepared SQL statements

Michael Bayer mike_mp at zzzcomputing.com
Thu Dec 18 16:59:39 CET 2014

> On Dec 18, 2014, at 5:39 AM, M.-A. Lemburg <mal at egenix.com> wrote:
> On 17.12.2014 19:13, INADA Naoki wrote:
>> As I said before, prepared statement is normally bound to connection.
>> So `.prepare()` method should be connection's method, not cursor's.
>> prepared = conn.prepare("SELECT ?+?")
>> ...
>> cur = conn.cursor()
>> cur.execute(prepared, (1, 2))
>> cur.fetchone()  # returns (3,)
> I'm not sure which database you are talking about, but in terms
> of concepts, statements are run on cursors, so adding the method
> to connections doesn't look right (we dropped this logic when moving
> from DB-API 1.0 to 2.0 a long time ago).
> Also note that the prepare step may need access to the
> cursor configuration settings to be correctly interpreted
> by the database.

oh, so are you saying that if one produces a prepared statement from a cursor, and then that cursor is closed, I have no option to re-use that prepared statement anywhere else, is that right?  

That would make the entire feature a non-starter for me.    SQLAlchemy doesn’t hold cursors open beyond a single statement.    My users would very much want a prepared-statement-per-transaction object.

JDBC provides prepared statements as a service of the Connection.    I think DBAPI should be doing the same.

More information about the DB-SIG mailing list