Yet Another MySQL Problem

Kushal Kumaran kushal.kumaran at gmail.com
Thu May 27 11:17:04 EDT 2010


On Thu, 2010-05-27 at 10:30 -0400, Victor Subervi wrote:
> On Thu, May 27, 2010 at 10:17 AM, Kushal Kumaran
> <kushal.kumaran at gmail.com> wrote:
>         
>         On Thu, 2010-05-27 at 08:34 -0400, Victor Subervi wrote:
>         > Hi;
>         > I have this code:
>         >
>         >     sql = "insert into %s (%s) values ('%%s');" %
>         (personalDataTable,
>         > string.join(cols[1:], ', '))
>         > #    cursor.execute(sql, string.join(vals[1:], "', '"))
>         >     cursor.execute('insert into %s (%s) values ("%s");' %
>         > (personalDataTable, string.join(cols[1:], ', '),
>         string.join(vals[1:],
>         > '", "')))
>         >
>         > Now, if I uncomment the 2nd line and comment the third, the
>         command
>         > fails because, apparently, that "');" at the tail end of sql
>         (1st
>         > line) gets chopped off. Why??
>         
>         
>         That's not why it is failing.
>         
>         The second argument to cursor.execute must be a tuple of
>         values that
>         will be escaped and interpolated into the query.  You are
>         passing in a
>         string instead.
> 
> So I tried this:
> 
>     sql = "insert into %s (%s) values (%%s);" % (personalDataTable,
> string.join(cols[1:], ', '))
>     cursor.execute(sql, vals[1:])
> 
> and got this:
> 

> <snip>

> query = 'insert into doctorsPersonalData (Store, FirstNam...OB, Email,
> PW, State, ShippingState) values (%s);', db = <weakproxy at
> 0x2b4c17e707e0 to Connection>, db.literal = <bound method
> Connection.literal of <_mysql.connection open to 'localhost' at
> e6b08c0>>, args = ['prescriptions', 'Beno', 'Candelon', '123', '456',
> '789', '11 here', '', 'csted', '00820', '22 there', '', 'csted',
> '00820', '2000-01-01', 'benoismyname', '12345', 'CA', 'AR']
> 
> TypeError: not all arguments converted during string formatting
>       args = ('not all arguments converted during string
> formatting',)  
> 
> 
> You sure about not converting to string??
> 

Yep, pretty sure.  You still need to have as many %s in the query string
as the number of values.  Since you seem to be passing in 19 values (by
a rough count), the query string must be like this:

insert into doctorsPersonalData (Store, FirstNam.....) values
(%s, %s, %s, ...19 of these)

not

insert into doctorsPersonalData (Store, FirstNam.....) values
(%s)

The exception with the "not all arguments converted" message says you
have too few %s.

> 
> 
>         Also, lose the single quotes around the %s.
> 
> Well, sure, if not converting to string. Otherwise it's needed. Dennis
> advised not using quotes, but what he meant was not using double
> quotes. Single quotes, I have found by experimentation, do work.

You seem to have a strange definition of "work".

-- 
regards,
kushal






More information about the Python-list mailing list