[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