Getting binary data out of a postgre database

projecktzero projecktzero at yahoo.com
Fri Jun 24 14:03:53 EDT 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.

Can anyone show me the TypeError of my ways? Is there a good example
somewhere that shows getting binary data out of a database?

Thanks.




More information about the Python-list mailing list