Guardar y recuperar imagen desde Postgres

Marcos Alcazar marcos.alcazar en gmail.com
Mie Ene 23 11:53:05 CET 2008


Que tal? Mi problema es otro... me parece que no esta del lado de postgres,
sino que no se como hacer para "formar" la imagen de nuevo sin crearla
nuevamente en disco...

Esto lo logro bien (aca tengo diferencia con vos, porque me llega la imagen
en el request de un form de mi pag. html):

file = self.request().field('archivo')
# Aca creo un objeto que yo he definido un objeto
# y lo mapeo con la base de datos. Yo utilizo Postgres,
#como dije, y uso SQLAlchemy como ORM:

        class ObjetoGrande(object):
                pass

        metadata = MetaData()

        objetoGrande = Table('objeto_grande' , metadata ,
                             Column('id' , Integer , primary_key=True),
                             Column('nombre' , String() , nullable=False),
                             Column('data' , BLOB , nullable=False)
                             )
        mapper(ObjetoGrande,objetoGrande)

        engine =
create_engine('postgres://postgres:postgres@localhost:5432/marcos'
)
        Session = sessionmaker(bind=engine, autoflush=True,
transactional=True )
        session = Session()

        obj = ObjetoGrande()
        obj.nombre = file.filename
        obj.data = file.value

        session.save(obj)
        session.commit()
#Y si yo hago esto, recupero la imagen y la puedo recrear en disco...
        obj1 = session.query(ObjetoGrande).one() #Consulta ayudado por
SQLAlchemy :)
        archivo = open("/home/marcos/imagen.jpg", 'w')
        archivo.write(obj1.data)
        archivo.close()

Si en este momento voy a /home/marcos, veo mi imagen completita. Hermosa...


Lo que yo pretendo hacer, es no tener que recrearla en disco antes de
mostrarla en alguna otra pag web, pero como no se hacer eso, tengo que crear
la imagen en el disco y de ahi recuperarla de la pagina...

Ah... tambien use PIL.... pero es exactamente lo mismo.. pero en la base
tengo que guardar mas datos (el tamaño y el modo...) y los datos que guardo
es un string de pixeles que saco de la imagen a traves de img.getdata() de
PIL.. y ademas me caso con PIL, algo que no querria hacer...

Si se te llega a ocurrir alguna solucion, por favor avisame, porque estoy
medio perdido en este mundo web y pythonico...

Saludos, Marcos Alcazar

2008/1/22 Manuel Enrique González Ramírez <maengora en gmail.com>:

> Viejo, yo tengo un problema similar, solo que no es Postgres sino en MySQL
> y
> tampoco es para la web sino para una aplicacion de escritorio.
>
> Me han enviado algunas soluciones pero pues... como la verdad aún soy muy
> novato en estoy de la programación solo me he confundido más.
>
> Intenté utilizar PIL pero mm nada.
>
> A ver si algún experto se le mide a mandar unas cuantas líneas de código
> bien documentadas al estilo mini tutorial para torpes como yo en el manejo
> de imágenes a través de bases de datos (insertar y consultar con eso
> bastaría)
>
> El día 22/01/08, Marcos Alcazar <marcos.alcazar en gmail.com> escribió:
> >
> > Hola buen dia...
> >
> > Les comento mi dilema. En este momento deseo almacenar una imagen que
> > recupero a traves de una pagina web a una tabla de postgres... El campo
> en
> > el que guardo la data del archivo es 'bytea'
> >
> > file = self.request().field('archivo')
> >
> > De aca puedo sacar el nombre del archivo y el contenido. (file.filenamey
> > file.value). Esto lo quiero guardar en mi base. Luego deseo recuperar
> esa
> > informacion, recrear esa imagen y volver a mostrarla en otra pagina web.
> >
> > Sacando lo web, quisiera lograr recrear esa imagen sin tener que
> > escribirla
> > en disco.
> >
> > Sera posible eso? Estoy demasiado perdido? No lo se, por eso pido su
> ayuda
> >
> > Desde ya muchas gracias!
> >
> > Marcos Alcazar
> > _______________________________________________
> > Lista de correo Python-es
> > http://listas.aditel.org/listinfo/python-es
> > FAQ: http://listas.aditel.org/faqpyes
> >
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es