[DB-SIG] pyformat Parameter Style
Chris Cogdon
chris at cogdon.org
Sat May 10 12:05:40 EDT 2003
On Saturday, May 10, 2003, at 10:54 US/Pacific, M.-A. Lemburg wrote:
> The DB API says "Python extended format codes" meaning that all
> valid Python formatting codes (including their parameters) may
> be used.
That's very interesting. Looking at some of the code I have, using, for
example %(key)d would not work, even if the parameter was an integer,
because the API turns each and every single parameter into a string
regardless of the type.
This code snippet from pyPgSQL.PgSQL:
if len(parms) == 1 and \
(type(parms[0]) in [DictType, ListType, TupleType]
or \
isinstance(parms[0],
PgResultSet)):
parms = _quoteall(parms[0])
else:
parms = tuple(map(_quote, parms));
self.res = self.conn.conn.query(_qstr % parms)
Notice how the parameters are 'quoted' first (which will turn them ALL
into strings), and THEN it's passed to the '%' operator. If you have
any %d in there, you'll get a TypeError.
And, take this docstring from pyPgSQL:
cursor.execute(query[, param1[, param2, ..., paramN])
Execute a query, binding the parameters if they are passed.
The
binding syntax is the same as the '%' operator except that
only %s
[or %(name)s] should be used and the %s [or %(name)s]
should not be
quoted. Any necessary quoting will be performed by the
execute
method.
--
("`-/")_.-'"``-._ Chris Cogdon <chris at cogdon.org>
. . `; -._ )-;-,_`)
(v_,)' _ )`-.\ ``-'
_.- _..-_/ / ((.'
((,.-' ((,/ fL
More information about the DB-SIG
mailing list