Yet Another MySQL Problem

Victor Subervi victorsubervi at gmail.com
Thu May 27 12:32:54 EDT 2010


On Thu, May 27, 2010 at 12:11 PM, Kushal Kumaran
<kushal.kumaran at gmail.com>wrote:

> Since I'm in a good mood today, here's a little present:
>
> def insert(cursor, table, columns, values):
>    """Insert a row into a table.  columns must be a list of column
>    names.  values must be a list of values for the new row.  The
>    columns and values must correspond."""
>    assert len(columns) == len(values)
>
>    stmt = """
> insert into %s (%s) values (%s)
> """ % (table,
>       ', '.join(columns),
>       ', '.join('%s' * len(values)))
>    logging.debug('stmt: %s, values: %s' % (stmt, values))
>
>    cursor.execute(stmt, values)
>
> Glad you're in a good mood :)
First, I got an error because logging isn't defined. What should I import?
I commented out that line. Here's my original code, which is now commented
out:

##    cursor.execute('insert into %s (%s) values ("%s");' %
(personalDataTable, string.join(cols[1:], ', '), string.join(vals[1:], '",
"')))

I ran this with your code:

    insert(cursor, personalDataTable, cols[1:], vals[1:])

and got this error:

 /var/www/html/angrynates.com/cart/enterPeople3.py
   97   print "<a href='enterPeople.py?personalDataTable=%s'>Enter more
personal data?</a><br />" % personalDataTable
   98   print "<a href='enterProducts.py'>Enter products?</a>"
   99   print '</body>\n</html>'
  100
  101 enterPeople3()
enterPeople3 = <function enterPeople3>
 /var/www/html/angrynates.com/cart/enterPeople3.py in enterPeople3()
   51   if whatDo == 'insert':
   52     # We will not include the ID column
   53     insert(cursor, personalDataTable, cols[1:], vals[1:])
   54 #    sql = "insert into %s (%s) values (%%s);" % (personalDataTable,
string.join(cols[1:], ', '))
   55 #    cursor.execute(sql, vals[1:])
global insert = <function insert>, cursor = <MySQLdb.cursors.Cursor object>,
personalDataTable = 'doctorsPersonalData', cols = ['ID', 'Store',
'FirstName', 'LastName', 'Phone', 'Cell', 'Fax', 'Address1', 'Address2',
'City', 'Zip', 'ShippingAddress1', 'ShippingAddress2', 'ShippingCity',
'ShippingZip', 'DOB', 'Email', 'PW', 'State', 'ShippingState'], vals =
['Null', 'prescriptions', 'jane', 'shmo', '321-654-9870', '456', '789', '11
here', '', 'csted', '00820', '22 there', '', 'csted', '00820', '2000-01-01',
'victorsubervi', '12345', 'DC', 'AK']
 /var/www/html/angrynates.com/cart/enterPeople3.py in
insert(cursor=<MySQLdb.cursors.Cursor object>, table='doctorsPersonalData',
columns=['Store', 'FirstName', 'LastName', 'Phone', 'Cell', 'Fax',
'Address1', 'Address2', 'City', 'Zip', 'ShippingAddress1',
'ShippingAddress2', 'ShippingCity', 'ShippingZip', 'DOB', 'Email', 'PW',
'State', 'ShippingState'], values=['prescriptions', 'jane', 'shmo',
'321-654-9870', '456', '789', '11 here', '', 'csted', '00820', '22 there',
'', 'csted', '00820', '2000-01-01', 'victorsubervi', '12345', 'DC', 'AK'])
   19       ', '.join('%s' * len(values)))
   20 #   logging.debug('stmt: %s, values: %s' % (stmt, values))
   21    cursor.execute(stmt, values)
   22
   23 def enterPeople3():
cursor = <MySQLdb.cursors.Cursor object>, cursor.execute = <bound method
Cursor.execute of <MySQLdb.cursors.Cursor object>>, stmt = '\ninsert into
doctorsPersonalData (Store, FirstNa... %, s, %, s, %, s, %, s, %, s, %, s,
%, s, %, s)\n', values = ['prescriptions', 'jane', 'shmo', '321-654-9870',
'456', '789', '11 here', '', 'csted', '00820', '22 there', '', 'csted',
'00820', '2000-01-01', 'victorsubervi', '12345', 'DC', 'AK']
 /usr/lib64/python2.4/site-packages/MySQLdb/cursors.py in
execute(self=<MySQLdb.cursors.Cursor object>, query='\ninsert into
doctorsPersonalData (Store, FirstNa... %, s, %, s, %, s, %, s, %, s, %, s,
%, s, %, s)\n', args=['prescriptions', 'jane', 'shmo', '321-654-9870',
'456', '789', '11 here', '', 'csted', '00820', '22 there', '', 'csted',
'00820', '2000-01-01', 'victorsubervi', '12345', 'DC', 'AK'])
  146         query = query.encode(charset)
  147         if args is not None:
  148             query = query % db.literal(args)
  149         try:
  150             r = self._query(query)
query = '\ninsert into doctorsPersonalData (Store, FirstNa... %, s, %, s, %,
s, %, s, %, s, %, s, %, s, %, s)\n', db = <weakproxy at 0x2b13d59857e0 to
Connection>, db.literal = <bound method Connection.literal of
<_mysql.connection open to 'localhost' at 132de990>>, args =
['prescriptions', 'jane', 'shmo', '321-654-9870', '456', '789', '11 here',
'', 'csted', '00820', '22 there', '', 'csted', '00820', '2000-01-01',
'victorsubervi', '12345', 'DC', 'AK']

ValueError: unsupported format character ',' (0x2c) at index 221
      args = ("unsupported format character ',' (0x2c) at index 221",)

It appears to be separating the '%' from the 's' in your assert of '%s', but
since I don't know anything about asserts, I'm hoping you can help me here.
TIA,
beno
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100527/283f2572/attachment-0001.html>


More information about the Python-list mailing list