> 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