> There's one other problem that I see, though it might be minor or  
> infrequent enough not to matter.  %s positional placeholders are  
> easily to generate programmatically than {#} placeholders.   Think  
> about translating this:
> 
> def make_query(flag1, flag2):
>      base_query = 'SELECT %s from %s WHERE name = %s '
>      if flag1:
>          base_query += 'AND age = %s '
>      if flag2:
>          base_query += 'AND height = %s '
>      base_query = 'AND gender = %s'
>      return base_query

Of course, *this* specific example is flawed: you are likely to
pass the result to a DB-API library, which supports %s as a
placeholder independent of whether strings support the modulo
operator (it is then flawed also in that you don't typically
have placeholders for the result fields and table name - not sure
whether you even can in DB-API).

If I had to generate a computed format string, I'd probably
use the named placeholders, rather than the indexed ones.

   base_query = 'SELECT {field} FROM {table} WHERE name = {name} '
   if flag1:
      base_query += 'AND age = {age} '
   if flag2:
      base_query += 'AND height = {height} '
   base_query += 'AND gender = {gender}'
   return base_query

Regards,
Martin
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to