formating query with empty parameter

Tim Chase python.list at tim.thechases.com
Mon May 25 12:16:48 EDT 2009


>> To stave off this problem, I often use:
>>
>>    values = [
>>     data['a'],
>>     data['b'],
>>     data['c'],
>>     data['d'],
>>     data['e'],
>>     data['f'],
>>     data['g'],
>>     ]
>>    params = ', '.join('%s' for _ in values)
>>    query = """
>>      BEGIN;
>>        INSERT INTO table
>>          (a,b,c,d,e,f,g)
>>        VALUES (%s);
>>      COMMIT;
>>      """ % params
>>    self.db.execute(query, values)
>>
> 
> Why do you pass values to execute() if you already have your query
> formatted?

The "params" might be better named "placeholders".  So after the

    query = "..." % params

the query looks like your original (go ahead and print "query" to 
see), only the number of placeholders ("%s") is guaranteed to 
match the number of values you pass in during the execute() call. 
  The second iteration I gave goes one step further to ensure 
that the "(a,b,c,d,e,f,g)" portion also matches in count to the 
number of values and place-holders to be used.

Once you have a SQL query that matches what you plan to pass 
(based on your initial data-structure:  a list/tuple or a 
dictionary), then you call execute(query, values) to have the 
database then associate the parameter-placeholders ("%s") with 
the corresponding value from "values".

-tkc





More information about the Python-list mailing list