By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,089 Members | 2,432 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,089 IT Pros & Developers. It's quick & easy.

Read binary data from MySQL database

P: n/a
Hello,

I try to write a python application with wx that shows images from a
MySQL database. I use the following code to connect and get data when
some event was triggered:

dbconn = MySQLdb.connect(host="localhost", user="...", passwd="...",
db="images")
dbcurs = dbconn.cursor()
dbcurs.execute("""SELECT imgdata FROM images LIMIT 1""")
imgstring = dbcurs.fetchone()[0]
frame.showImage(imgstring)

Within my frame, the following method is defined:

def showImage(self, imgstring):
imgdata = StringIO.StringIO()
imgdata.write(imgstring)
print imgdata.getvalue()
wx.ImageFromStream(imgdata, wx.BITMAP_TYPE_GIF)
panel = wx.Panel(self, -1)
self.panel = panel

But this does not work. The converter says that the data is not valid
GIF. When I print the content of imgstring after the database select
statement, it contains something like this:

array('c', 'GIF89aL\x01=\x01\x85\x00\x00\x00\x00\x00\xff\xff\ xff
\x00\xff\xff\xff[...]\x00\x00;')

When I try to print imgstring[1], the result is "I". So I don't quite
get what this print result is about and why my input should not be
valid. The data in the database is correct, I can restore the image
with tools like the MySQL Query Browser.

Thanks in advance,
Christoph

May 10 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
On Thu, 2007-05-10 at 07:19 -0700, Christoph Krammer wrote:
Hello,

I try to write a python application with wx that shows images from a
MySQL database. I use the following code to connect and get data when
some event was triggered:

dbconn = MySQLdb.connect(host="localhost", user="...", passwd="...",
db="images")
dbcurs = dbconn.cursor()
dbcurs.execute("""SELECT imgdata FROM images LIMIT 1""")
imgstring = dbcurs.fetchone()[0]
frame.showImage(imgstring)

Within my frame, the following method is defined:

def showImage(self, imgstring):
imgdata = StringIO.StringIO()
imgdata.write(imgstring)
print imgdata.getvalue()
wx.ImageFromStream(imgdata, wx.BITMAP_TYPE_GIF)
panel = wx.Panel(self, -1)
self.panel = panel

But this does not work. The converter says that the data is not valid
GIF. When I print the content of imgstring after the database select
statement, it contains something like this:

array('c', 'GIF89aL\x01=\x01\x85\x00\x00\x00\x00\x00\xff\xff\ xff
\x00\xff\xff\xff[...]\x00\x00;')
That means that imgstring is not a string, it's an array of characters.
Observe:
>>import array
a = array.array('c', 'Blahblahblah')
print a
array('c', 'Blahblahblah')
>>str(a)
"array('c', 'Blahblahblah')"
>>a.tostring()
'Blahblahblah'

Calling write() with an object that's not a string will implicitly call
str() on that object and write the result of that call to the file. Try
imgdata.write(imgstring.tostring()) to extract the string data from the
array.

Hope this helps,

--
Carsten Haese
http://informixdb.sourceforge.net
May 10 '07 #2

P: n/a
On Do, 10.05.2007, 16:19, Christoph Krammer wrote:
Hello,

I try to write a python application with wx that shows images from a
MySQL database. I use the following code to connect and get data when
some event was triggered:

dbconn = MySQLdb.connect(host="localhost", user="...", passwd="...",
db="images")
dbcurs = dbconn.cursor()
dbcurs.execute("""SELECT imgdata FROM images LIMIT 1""")
imgstring = dbcurs.fetchone()[0]
frame.showImage(imgstring)

Within my frame, the following method is defined:

def showImage(self, imgstring):
imgdata = StringIO.StringIO()
imgdata.write(imgstring)
Use
imgdata.write(imgstring.tostring())
or
imgstring.tofile(imgdata)
print imgdata.getvalue()
wx.ImageFromStream(imgdata, wx.BITMAP_TYPE_GIF)
panel = wx.Panel(self, -1)
self.panel = panel

But this does not work. The converter says that the data is not valid
GIF. When I print the content of imgstring after the database select
statement, it contains something like this:

array('c', 'GIF89aL\x01=\x01\x85\x00\x00\x00\x00\x00\xff\xff\ xff
\x00\xff\xff\xff[...]\x00\x00;')

When I try to print imgstring[1], the result is "I". So I don't quite
get what this print result is about and why my input should not be
valid. The data in the database is correct, I can restore the image
with tools like the MySQL Query Browser.

Thanks in advance,
Christoph

--
http://mail.python.org/mailman/listinfo/python-list

May 10 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.