[Python] psycopg2 e bytea

Stefano Dal Pra s.dalpra a gmail.com
Mar 15 Feb 2011 15:59:58 CET


2011/2/15 Daniele Varrazzo <piro a develer.com>

> On Tue, 15 Feb 2011 15:36:03 +0100, Stefano Dal Pra <s.dalpra a gmail.com>
> wrote:
> > saluti, sto tentando di inserire un valore bytea in una tabella di un db
> > postgres 8.4.7
> > usando psycopg2 2.2.1-1 (Python 2.6.6) e ottengo un errore. Se qualcuno
> ha
> > lumi mi puo' suggerire
> > il suo parere?
> >
> > Descrivo il problema:
> >
> > # carico un'immagine
> >>>> mypic=open('/home/sdp/testpic.png','r').read()
> >
> > # provo a inserirla con psycopg2
> >>>> q.curs.execute("insert into blobs (name,file) values (%s,%s)",('UN
> nome
> > a caso',mypic,))
>
> Psycopg fa una conversione in base al tipo in Python. Le stringhe vengono
> convertite come testo, non come binary. Credo che in Python 2.6 l'unico
> tipo convertito in binario sia buffer.
>
> Ma probabilmente la soluzione più semplice è quella di usare
> psycopg2.Binary(mypic). Prova::
>
>    q.curs.execute(
>        "insert into blobs (name,file) values (%s,%s)",
>         ('UN nome a caso', psycopg2.Binary(mypic),))
>

Provato, funziona:

 docetest=> select md5(file) from blobs;
               md5
----------------------------------
 771f5d3c3b264842d584bd7dfc42b2ab
(1 riga)

>>> gu=hashlib.md5(mypic)
>>> gu.hexdigest()
'771f5d3c3b264842d584bd7dfc42b2ab'

quindi nel db c'e' effettivamente lo stesso dato che ho inserito (meglio
controllare: non si sa mail...)

Grazie mille! Risposta e soluzione i 5 min!

Stefano

>
> Noto _senza_ piacere che la soluzione più semplice non è documentata...
> provvedo subito.
>
> Ciao!
>
> --
> Daniele Varrazzo - Develer S.r.l.
> http://www.develer.com
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20110215/a4bccf3f/attachment.html>


Maggiori informazioni sulla lista Python