[Tutor] getting an image out of a postgre database

Mike Hansen mhansen at cso.atmel.com
Thu Jun 23 16:20:56 CEST 2005


Well, I've managed to get an image into a postgre database, but now I'm having 
trouble getting it out.

#! /usr/bin/env python

from pyPgSQL import PgSQL

def main():
     connectdb = PgSQL.connect('server:port:database:username:password')
     cur = connectdb.cursor()
     sqlStatement = """SELECT image from images where image_id = 1"""
     cur.execute(sqlStatement)
     rec = cur.fetchone()
     # TODO make temp file name include image_id.
     # TODO use tempfile module
     # TODO clean up old temp files
     tempFileName = "1.jpg"
     tempFile = open(tempFileName, "w")
     tempFile.write(rec[0])
     tempFile.close()
     cur.close()

     print "Content-type: text/html\n\n"
     print """"<?xml version="1.0" encoding="windows-1250"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
<title></title>
</head>

<body>
<img src="1.jpg">
</body>
</html>
"""

if __name__ == '__main__':
     main()

Traceback (most recent call last):
   File "./dispimage.py", line 39, in ?
     main()
   File "./dispimage.py", line 16, in main
     tempFile.write(rec[0])
TypeError: argument 1 must be string or read-only character buffer, not instance

So, rec[0] is an instance, but an instance of what? Since I needed to use the 
PgSQL.PgBytea method on the image before inserting it into the database, do I 
need to use a similar method to undo what PgBytea did to it, or am I incorrectly 
writing this binary data? I tried PgSQL.PgUnQuoteBytea(rec[0]), but that didn't 
work.

If this is more appropriate for another mail list, let me know.

Mike


More information about the Tutor mailing list