On 22 Jun 2001 12:46:30 +0100, Mayers, Philip J wrote:
...Never mind the why. The photo data (small - 80kb JPEGs) has to go into the PostgresSQL database. I'm using something like this:
SQL_add_photo:
insert into photo (id,data) values ( <dtml-sqlvar id type=int>, <dtml-sqlvar data type=string>)
add_photo:
container.SQL_add_photo(id,file.read())
you're sending binary data (file.read()) but tell zope to insert it as a string. i don't even know if zope supports a type=binary switch. the best thing you can do is to is to write a python method that directly uses psycopg and its Binary() constructor. mmm... psycopg does not have a Binary yet... ok, in a python metod try out the following code (we define a Binary class, as per DBAPI-2.0, that way you'll easily use psycopg Binary when implemented, in a few days i hope): import psycopg class Binary: def __init__(self, s): self.s = s def __str__(self): return "'" + join(map(lambda x: '\\%o' % ord(x), self.s), '') + "'" def add_photo(id, file): dict = {'id': int(id), 'data':Binary(file.read())} o = psycopg.connect("your connection string here") c = o.cursor() c.execute("INSERT INTO photo (id, data) VALUES (%(id)d, %(data)s)", dict) c.commit() hope this helps, federico -- Federico Di Gregorio MIXAD LIVE Chief of Research & Technology fog@mixadlive.com Debian GNU/Linux Developer & Italian Press Contact fog@debian.org All programmers are optimists. -- Frederick P. Brooks, Jr.