+1 on explicit separation between prepared statement and server-side
placeholder.
Prepared statement holds resource on server side.
For example, following code is dangerous when combined with connection pool.
def myexecute(params):
cur = con.cursor()
cur.prepare(MY_STMT) # allocate resource on server-side that is
freed when connection is closed.
return cur.execute(params)
I think prepared statement should be bound to connection.
Connection.prapare(name, stmt, skip_on_dup=False)
Prepare stmt as name.
If skip_on_dup is true and same name is prepared before, do nothing.
Cursor.execute_prepared(name, params, stmt=None)
Execute prepared statement named name.
If stmt is not None, call Cursor.prepare(name, stmt, skip_on_dup=True)
before execute.
Example 1:
def myexecute(params):
cur = connection.cursor()
return cur.execute_prepared("mystmt", params, MY_STMT)
Example 2:
def create_connection(opts):
global _connection
_connection = MyDB.connect(**opts)
_connection.prepare("mystmt", MY_STMT)
def myexecute(params):
cur = _connection.cursor()
cur.execute_prepared("mystmt", params)
On Tue, Apr 8, 2014 at 6:21 AM, Peter Eisentraut <[email protected]> wrote:
> On 3/24/14, 12:53 PM, Daniele Varrazzo wrote:
>> - is there enough consensus - not only in the Python world - about how
>> to implement a prepared statements interface on a db driver?
>
> In other languages, there is often a parameter on the connection handle
> saying whether (the analogue of) a prepare+execute call should be only a
> parameter substitution or a full prepared statement. I think this is
> due to the historical confusion between these aspects and therefore not
> a good idea for a new API. In Python, adding an explicit prepare
> function and having that actually prepare in all cases sounds like a
> decent idea to me.
>
> _______________________________________________
> DB-SIG maillist - [email protected]
> https://mail.python.org/mailman/listinfo/db-sig
--
INADA Naoki <[email protected]>
_______________________________________________
DB-SIG maillist - [email protected]
https://mail.python.org/mailman/listinfo/db-sig