Hi,

I've been wanting to implement prepared statements, not sure if that's
considered to be supported by pygresql.

I found that I can do:

>>> import pg
>>> d=pg.DB('ts')
>>> d.query('prepare c AS INSERT INTO t VALUES($1)') -- note postgres $1 
>>> parameter
>>> d.query_formatted('EXECUTE c(1)')
'1'

And:

>>> d.query_formatted('EXECUTE c(%s)', [1], inline=True)
'1'

But this fails:

>>> d.query_formatted('EXECUTE c(%s)', [1])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/pg.py", line 1870, in query_formatted
    command, parameters, types, inline))
  File "/usr/lib64/python2.7/site-packages/pg.py", line 1852, in query
    return self.db.query(command, args)
pg.DatabaseError: ERROR:  bind message supplies 1 parameters, but prepared 
statement "" requires 0

Looks like pygres converts my %s and is sending:
sendto(5, "P\0\0\0\25\0EXECUTE c($1)\0\0\0B\0\0\0\23\0\0\0\0\0"..., 64, 
MSG_NOSIGNAL, NULL, 0) = 64

which I think is maybe itself executing an anonymous, prepared statement to
execute my named, prepared statement (??)

Is there a nice way to execute a prepared statement, preferably with
inline=False to send as a list of params rather than constructing a statement
which then has to be parsed ?

Thanks,
Justin
_______________________________________________
PyGreSQL mailing list
PyGreSQL@vex.net
https://mail.vex.net/mailman/listinfo/pygresql

Reply via email to