dynamic if statement

Mark Lawrence breamoreboy at yahoo.co.uk
Tue Jun 18 11:27:44 EDT 2013


On 18/06/2013 15:56, Tim Chase wrote:
> On 2013-06-18 07:10, upperdecksu at gmail.com wrote:
>> I have a set of queries that are run against various
>> databases/tables.  The result is all the same in that I always get
>> back the same field names.
>>
>> I query fld1, fld2, fld3, qty, qty2 from table1
>> then I loop thru the results
>>    if fld1 = 'a' add qty to some_total1
> ...
>> I created a database pair that contains (table1,fld1 = 'a',add qty
>> to some_total1) (table2,fld2 = 'b',qty to some_total1)
>>                                      (table3,fld3 = 'c',qty2 to
>> some_total1)
>
> Given the data-structure you have, and that it's hard-coded (rather
> than able to take dynamic/dangerous user input) for the table-name,
> I'd do something like this (untested)
>
>    for tablename, compare_field, compare_value, source_field in (
>        ("table1", "fld1", "a", "qty"),
>        ("table2", "fld2", "b", "qty"),
>        ("table3", "fld3", "c", "qty2"),
>        ):
>      # using string-building rather than escaping because
>      # 1) we know the tablenames are hard-coded/safe from above, and
>      # 2) this sort of escaping often chokes query parsers
>      query = "SELECT fld1, fld2, fld3, qty, qty2 from %s" % tablename
>      cursor.execute(query)
>
>      name_index_map = dict(
>        (info[0], i)
>        for info, i in enumerate(cursor.description)

Looks like this should be :-
for i, info in enumerate(cursor.description)

>        )
>      for row in cursor.fetchall():
>        db_value = row[name_index_map[compare_field]]
>        if db_value == compare_value:
>          addend = row[name_index_map[source_field]]
>          some_total_1 += addend
>
> -tkc
>

-- 
"Steve is going for the pink ball - and for those of you who are 
watching in black and white, the pink is next to the green." Snooker 
commentator 'Whispering' Ted Lowe.

Mark Lawrence




More information about the Python-list mailing list