Hi;
I have loaded an image from a form into MySQL using Python as a longblob. Here 
is my table:

mysql> describe pics;
+-------------+------------+------+-----+---------+----------------+
| Field       | Type       | Null | Key | Default | Extra          |
+-------------+------------+------+-----+---------+----------------+
| ID          | int(11)    | NO   | PRI | NULL    | auto_increment | 
| Specials_ID | int(11)    | NO   | MUL | NULL    |                | 
| Number      | tinyint(1) | YES  |     | NULL    |                | 
| Pic         | longblob   | YES  |     | NULL    |                | 
+-------------+------------+------+-----+---------+----------------+

Here is my Python code that loads the data:

pic_zero = form.getfirst("pic_zero") # where pic_zero is an uploaded file 
(i.e., image) from a form calling this script
...
    pics = [pic_zero, pic_one, pic_two, pic_three]
    i = 0
    for pic in pics:
      if pic:
        sql = 'insert into pics values (Null, "%s", "%s", "%s")' % (max_id,  i, 
"%s")
        cursor.execute(sql, (MySQLdb.Binary(pic),), )
        db.commit()
      i += 1

Here is the Python code that calls the image:

#!/usr/bin/python
import cgitb; cgitb.enable()
import MySQLdb
import cgi
import sys,os
sys.path.append(os.getcwd())
from login import login
user, passwd, db, host = login()
form = cgi.FieldStorage()
id = form['id'].value
number = form['number'].value
db = MySQLdb.connect(host, user, passwd, db)
cursor= db.cursor()
cursor.execute("select Pic from pics where ID=%s and Number=%s", (id, number))
content = cursor.fetchall()[0][0].tostring()
cursor.close()
print 'Content-Type: image/jpeg'
print
print content

Here is the Python error:

   14 cursor= db.cursor()


   15 cursor.execute("select Pic from pics where ID=%s and Number=%s", (id, 
number))


   16 content = cursor.fetchall()[0][0].tostring()


   17 cursor.close()


   18 print 'Content-Type: image/jpeg'


content undefined, cursor = <MySQLdb.cursors.Cursor object>, cursor.fetchall = 
<bound method Cursor.fetchall of <MySQLdb.cursors.Cursor object>>, ].tostring 
undefinedAttributeError: 'str' object has no attribute 'tostring'

      args =
("'str' object has no attribute 'tostring'",)




Even when I hard code in the correct values I get this error. However, when I 
select * from pics, where there is only one longblob in the table, it prints 
out a tremendous load of data which indicates to me that a binary file has 
indeed been loaded. What I am trying to ascertain is why is this longblob 
considered a string? How can I more properly test if a binary file has been 
loaded?
TIA,
Jack
                                          

Reply via email to