[pyar] Fwd: Por Favor ayuda con sqlalchemy-gtk-glade

oduber e. vasquez b. ovasquezcyt en gmail.com
Jue Mayo 12 09:45:10 ART 2016


---------- Forwarded message ----------
From: oduber e. vasquez b. <ovasquezcyt en gmail.com>
Date: 2016-05-11 16:17 GMT-04:00
Subject: Por Favor ayuda con sqlalchemy-gtk-glade
To: pyar en python.org.ar


Buenas de antemano gracias por permitirme formar parte de pyar;

La presente es para solicitar ayuda sobre como almacenar en una tabla
utilizando el ORM SQLALCHEMY una foto o una imagen.


*LA AYUDA QUE DESEO ES COMO ALMACENAR LA IMAGEN QUE CARGO EN PANTALLA, EN
UN CAMPO DE MI TABLA Y LUEGO MOSTRARLA CUANDO LA SOLICITE.*



*tengo un modulo llamado modelo.py*

import datetime

from sqlalchemy import Table, Column, create_engine
from sqlalchemy import Integer, ForeignKey, String, Unicode, Sequence,
DateTime, types, func, Date, Boolean, Binary, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import backref, relationship, deferred
from sqlalchemy.ext.hybrid import hybrid_property

engine = create_engine("sqlite:///tb_patologia.db", echo=False)
Base = declarative_base()

class User(Base):

__tablename__ = "users"

id = Column(Integer, Sequence('users_id_seq'), primary_key=True)
cedula = Column(String(10), unique=True, nullable=False)
nombre = Column(String(100))
telefo = Column(String(50))
correo = Column(String)
name = Column(String(100),unique=True, nullable=False)
clave = Column(String)
fecha = Column(DateTime, default=func.now())
photo = deferred(Column(Binary))

def __repr__(self):

return "<User(cedula = '%s', nombre = '%s')>" % (self.cedula, self.nombre)


Base.metadata.create_all(engine).


*---------
*Luego tengo un modulo controlador llamado usuarios.py*

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Archivo: login.py J.M.M. 15/03/2011
Descripci—n: carga login.glade - Ventana de ingreso al sistema
"""

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk as gtk
from modelo import User
from conectarBD import ConectarBD

class Usuario(object):

    def __init__(self):
        objsE = gtk.Builder()

        try:
            objsE.add_from_file('usuario.glade')
        except:
            print("Archivo no Existe")
            sys.exit()


        # Se recuperan los widget a usar (no son necesarios todos)
        self.winEdit = objsE.get_object('winUsuarios')
        self.textoCedula = objsE.get_object('txtCedula')
        self.textoNombre = objsE.get_object('txtNombre')
        self.textoTelefono = objsE.get_object('txtTelefono')
        self.textoCorreo = objsE.get_object('txtCorreo')
        self.textoUsuario = objsE.get_object('txtUsuario')
        self.textoClave = objsE.get_object('txtClave')
        self.textoConfirmar = objsE.get_object('txtConfirmar')
        self.labelProceso = objsE.get_object('lblProceso')
        self.image = objsE.get_object('imgMostrar') #aqui va ol objeto de
la imagen
        # Se asocian las senales del archivo glade a metodos de la clase

        objsE.connect_signals(self)
        self.winEdit.show()




    def ModificarReg(self, nId):

        p = ConectarBD()
        try:
            session = p.get_db()
            record = session.query(User).filter_by(id=nId).one()
            # Se recuperan los widget a usar (no son necesarios todos)
            self.textoCedula.set_text(record.cedula)
            self.textoNombre.set_text(record.nombre)
            self.textoTelefono.set_text(record.telefo)
            self.textoCorreo.set_text(record.correo)
            self.textoUsuario.set_text(record.name)
            session.close()
        except:
            session.rollback()
            raise
        finally:
            session.rollback()



    def getData(self):
        """"""
        userDict = {}

        cedula = self.textoCedula.get_text()
        nombre = self.textoNombre.get_text()
        telefono = self.textoTelefono.get_text()
        corre = self.textoCorreo.get_text()
        user1 = self.textoUsuario.get_text()
        clave = self.textoClave.get_text()
        clave1 = self.textoConfirmar.get_text()
        photo = self.imagen.get_filename()

        userDict["cedula"] = cedula
        userDict["nombre"] = nombre
        userDict["telefo"] = telefono
        userDict["correo"] = corre
        userDict["name"] = user1
        userDict["clave"] = clave

        return userDict

    def on_btnGuardar_clicked(self, widget):
        if self.textoCedula.get_text() == "" or self.textoNombre.get_text()
== "":
            mostrar = mensajes.error(self.winEdit, mensajes.DATOS_NO)
            #self.textoCedula.set_focus()
            return

        if self.textoUsuario.get_text() == "":
            mostrar = mensajes.error(self.winEdit, mensajes.DATOS_NO)
            return

        if self.textoClave.get_text() == "" or
self.textoConfirmar.get_text() == "":
            mostrar = mensajes.error(self.winEdit, mensajes.DATOS_NO)
            return

        if self.textoClave.get_text() != self.textoConfirmar.get_text():
            mostrar = mensajes.error(self.winEdit, mensajes.LOGIN_FALSE)
            return

        if self.Identificador == 0:
            self.InserData()
        else:
            self.UpdateData(self.Identificador)

        self.winEdit.destroy()


    def InserData(self):
        UserDict = self.getData()
        if not UserDict:
            return

        data = ({"users":UserDict})

        book = User()
        book.cedula = data["users"]["cedula"]
        book.nombre = data["users"]["nombre"]
        book.telefo = data["users"]["telefo"]
        book.correo = data["users"]["correo"]
        book.name = data["users"]["name"]
        book.clave = data["users"]["clave"]
        book.photo = data["users"]["photo"]

        p = ConectarBD()
        try:
            session = p.get_db()
            session.add(book)
            session.commit()
            self.Identificador =  book.id
            session.close()
            #self.labelProceso.set_text('Registro Almacenado')
        except:
            session.rollback()
            raise
        finally:
            session.close()

    def UpdateData(self, numId):
        UserDict = self.getData()
        if not UserDict:
            return
        comboDict = dict(UserDict.items())
        p = ConectarBD()
        try:
            session = p.get_db()
            record = session.query(User).filter_by(id=numId).one()
            record.nombre = comboDict["nombre"]
            record.telefo = comboDict["telefo"]
            record.correo = comboDict["correo"]
            record.name = comboDict["name"]
            record.clave = comboDict["clave"]
            record.photo = comboDict["photo"]
            session.add(record)
            session.commit()
            session.close()
            self.labelProceso.set_text('Registro Modificado')
        except:
            session.rollback()
            raise
        finally:
            session.close()


            # ID y clave no son datos modificables, se mantienen sus valores

            self.winEdit.show() # Ventana de edición de los datos

    def on_btnImagen_clicked(self, widget):
        dialog = gtk.FileChooserDialog ("Open Image",
widget.get_toplevel(), gtk.FileChooserAction.OPEN)
        dialog.add_button (gtk.STOCK_CANCEL, 0)
        dialog.add_button (gtk.STOCK_OK, 1)
        dialog.set_default_response(1)

        filefilter = gtk.FileFilter()
        filefilter.add_pixbuf_formats ()
        dialog.set_filter(filefilter)

        if dialog.run() == 1:
            self.image.set_from_file(dialog.get_filename())

        dialog.destroy()


    def on_btnSalir_clicked(self, widget):
        self.winEdit.destroy()

    def on_winUsuarios_destroy(self, widget):
         self.winEdit.destroy()


    def on_txtCedula_focus_out_event(self, widget, cedula):
        numCedula = self.textoCedula.get_text()
        if numCedula == None:
            return
        p = ConectarBD()
        try:
            session = p.get_db()
            record = session.query(User).filter_by(cedula=numCedula).one()
            self.Identificador =  record.id
            self.textoCedula.set_text(record.cedula)
            self.textoNombre.set_text(record.nombre)
            if record.telefo:
                self.textoTelefono.set_text(record.telefo)
            if record.correo:
                self.textoCorreo.set_text(record.correo)
            if record.name:
                self.textoUsuario.set_text(record.name)
            session.close()

        except:
            session.close()
        finally:
            session.close()


if __name__ == '__main__':
    app = Usuario()
    gtk.main()



*LA AYUDA QUE DESEO ES COMO ALMACENAR LA IMAGEN QUE CARGO EN PANTALLA EN UN
CAMPO DE MI TABLA Y LUEGO MOSTRARLA CUANDO LA SOLICITE.*


-- 
Profesor oduber Vasquez Brito
Jefe de Telemática
Teléfono: 0426-567-3058



-- 
Profesor oduber Vasquez Brito
Jefe de Telemática
Teléfono: 0426-567-3058
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160512/c7225fd9/attachment-0001.html>


Más información sobre la lista de distribución pyar