[Tutor] MySQLdb error while inserting records

Victor Bouffier apple_py at biz-experts.net
Sun Mar 6 20:28:43 CET 2005


Hi all,

I consider myself fairly proficient with SQL, but I'm still getting the 
hang of the MySQL API. I am working through the examples in "Open Source 
Web Development with LAMP: Using Linux, Apache, MySQL, Perl, and PHP" by 
James Lee and Brent Ware, and trying to make the third "P" to be Python. :)

There is an example in the book which is written in Perl, used to insert 
new records to MySQL. I tried it as it is written and it works fine. I 
have migrated to Python another example that gets all of the records in 
the age_information table (SELECT query), and it is getting the data 
successfully. However, I am having problems with the program to insert 
records.

The following is my modified code in Python:

------------------------------
     1  #!/usr/bin/python
     2  # connect.py
     3
     4  import sys
     5  import MySQLdb
     6
     7  if len(sys.argv) != 4:
     8      print "You have to enter lastname, firstname and age\n"
     9      sys.exit(1)
    10
    11  # This is to change the age type from str to int
    12  last, first, strAge = sys.argv[1:]
    13  age = int(strAge)
    14
    15  # Some debugging lines
    16  print last, first, age
    17  print type(last), type(first), type(age)
    18  print
    19  #sys.exit()
    20
    21
    22  try:
    23      conn = MySQLdb.connect(host='localhost',
    24              user='apache', passwd='LampIsCool', db='people')
    25  except:
    26      print "Could not connect\n"
    27      sys.exit(1)
    28
    29  c = conn.cursor()
    30
    31  # prepare the SQL, exit() if the preparation fails
    32  query = '''
    33  INSERT INTO age_information
    34      (lastname, firstname, age)
    35      VALUES (?, ?, ?)
    36  '''
    37
    38  # execute the SQL
    39  records = c.execute(query, (last, first, age))
    40  if records >= 1:
    41      print "Succesfully inserted %d records" % records
    42  else:
    43      print "Could not insert anything, sorry."
    44
    45  c.commit()
    46  c.close()
    47  conn.close()
    48
------------------------------

Executing the script from the command line, I get the following output:


------------------------------
$ ./insert.py Cool Joe 13
Cool Joe 13
<type 'str'> <type 'str'> <type 'int'>

Traceback (most recent call last):
  File "./insert.py", line 39, in ?
    records = c.execute(query, (last, first, age))
  File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line 95, 
in execute
    return self._execute(query, args)
  File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line 110, 
in _execute
    self.errorhandler(self, TypeError, m)
  File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line 
33, in defaulterrorhandler
    raise errorclass, errorvalue
TypeError: not all arguments converted during string formatting
------------------------------

I was getting this same error so I entered lines 12 and 13 to change the 
age from type string to integer. No change.
Do you know what am I missing?

Thanks to all.

-- 
Victor Bouffier
Finance Manager
www.grupoandersons.com


More information about the Tutor mailing list