Am 17.05.2013 17:33, schrieb Daniele Varrazzo:> On Fri, May 17, 2013 at 4:10 PM, Christoph Zwerschke <c...@online.de> wrote:
>>
>> Another option would be to get rid of the parameter completely, and silently
>> accept both styles, whatever is used in the sql command passed to the
>> execute method.
>
> This is impossible:
>
> cur.execute("""Select 'Guess how many params this query has?? ? ? %s';""", args)

Hm, I forgot DBAPI does not care about SQL; it replaces parameters even inside SQL strings. So then, you're right, it can be ambiguous.

By the way, this is really unclear from the DBAPI 2 documentation:

The example in the dbapi 2 docs is "WHERE name=?" and "WHERE name=%s" which seems to indicate that the value is automatically put in quotes, particularly in view of footnote 5 which says "The client should not be required to "escape" the value so that it can be used — the value should be equal to the actual database value." In this example this means, the value would be a string without surrounding quotes. The example clause should then be "WHERE name='?'" and "WHERE name='%s'".

Maybe this should be changed in DBAPI 3? This would allow the driver to use prepared statements under the hood.

-- Chris

_______________________________________________
DB-SIG maillist  -  DB-SIG@python.org
http://mail.python.org/mailman/listinfo/db-sig

Reply via email to