[Tutor] Formatting String for SQL Insert

richard python at keep-trying.com
Wed Jan 21 14:26:43 EST 2004


Greetings,

Ok, working on the second example which you gave, (seems
a good idea to let the module do some of the work if it means
less coding and ensuring that the format is correct.)

(connection module is PyPgSQL format string %s)

However when I have tried using the code, virtually as is
apart from the comma at then end of the 4th line. The
script will not compile complaining of a syntax error in
the c.execute line.

If I remove the reference to the table fields (which in this
case I do not need) I then get the error of not enough
attributes. The new code is below. I have added some
comments of what I think the code is doing. It may be
I am misunderstanding something.

-----> Start
def saveButton(self, event):
datavalues=[]  #set up empty list
db_keys = [] #set up empty list
db_keys = 
('code','name','shortname','adds1','adds2','adds3','town','county','pcode','country','shortloc','tel1','tel2','spare1','spare2','mob1','mob2','fax1','type','contact','comments') 
# field names
tablename = 'fmna' # set name of table

for i in range(21): # loop to get datavalues from the the text controls on form
         datavalues.append(eval('self.textCtrl%d.GetValue()' %i))
  c = mydb.cursor() # setup up database query
  sqlquery1 = 'Insert into %s (%s) values (%s);' % (  #string
                     tablename,  # 1st %s
                     ','.join(db_keys), #2nd %s
                     ','.join(join(['%s'] * len(db_keys)) # unsure of this
                     )
  c.execute(sqlquery1, % tuple(datavalues)) # assume this inserts each 
datavalue as correctly
formated for SQL string??

<---- end (spacing is mangled)

More help is once again appreciated.

Regards

Richard



>An alternative approach depends upon the parameter processing for
>you sql module.  Since your example shows %s, I'll assume that's
>correct.  the module will have an attribute paramstyle which tells
>you how parameters are specified (see the DB API spec).  To use %s,
>the paramstyle should be 'format'.
>
>code is UNTESTED but should give correct idea
>
>stmt = 'INSERT INTO %s (%s) VALUES (%s);' % (
>         tablename,
>         ','.join(db_keys),
>         ','.join(['%s'] * len(db_keys)),
>         )
>cursor.execute(stmt, tuple(db_values))
>
>This approach puts the burden of converting your values into the proper
>format for your DB on the DB module.
>
>HTH




More information about the Tutor mailing list