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 _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor