domingo, 12 de julio de 2015

20 - Python PyQt (Interfaz gráfica) - QtSql MySQL (Insertar datos)




En este capítulo del tutorial de Python 3 más PyQt5 veremos como conectar a bases de datos MySQL y generaremos una consulta para insertar registros en una determinada tabla, para ello utilizaremos las clases que proporciona el módulo QtSql.

Para el ejemplo crearemos una base de datos Mysql llamada usuarios, a la cuál agregaremos una tabla también llamada usuarios con las siguientes columnas:
  • id : del tipo INT, Autoincrementable y clave primaria
  • nombre : del tipo VARCHAR y con una longitud de 50
  • edad : del tipo INT

Del módulo QtSql utilizaremos las dos siguiente clases:

QSqlDatabase: para establecer la conexión a la base de datos
QSqlQuery: para generar la consulta





insertar.pyw


import sys
from PyQt5.QtWidgets import QApplication, QDialog, QGridLayout, QMessageBox, QLabel, QPushButton, QLineEdit, QSpinBox
from PyQt5 import uic
from PyQt5.QtSql import QSqlDatabase, QSqlQuery

class Dialogo(QDialog):
 def __init__(self):
  QDialog.__init__(self)
  self.setWindowTitle("Insertar datos") #Título
  self.resize(300, 300) #Tamaño inicial
  self.setMinimumSize(300, 300) #Tamaño mínimo
  self.setMaximumSize(300, 300) #Tamaño máximo
  self.layout = QGridLayout() #Crear un layout grid
  self.setLayout(self.layout) #Agregar el layout al cuadro de diálogo
  self.label_nombre = QLabel("Nombre:") #Etiqueta nombre
  self.txt_nombre = QLineEdit() #Campo para ingresar el nombre
  self.label_edad = QLabel("Edad:") #Etiqueta edad
  self.txt_edad = QSpinBox() #Campo para ingresar la edad
  #Botones
  self.btn_insertar = QPushButton("Insertar")
  self.btn_cancelar = QPushButton("Cancelar")
  #Agregar elementos al layout divido en dos columnas
  self.layout.addWidget(self.label_nombre, 1, 1)
  self.layout.addWidget(self.txt_nombre, 1, 2)
  self.layout.addWidget(self.label_edad, 2, 1)
  self.layout.addWidget(self.txt_edad, 2, 2)
  self.layoutButton = QGridLayout() #Layout para agrupar los botones
  #Agregar los botones al layoutButton
  self.layoutButton.addWidget(self.btn_insertar, 1, 1)
  self.layoutButton.addWidget(self.btn_cancelar, 1, 2)
  #Agregar el layoutButton en la fila 3 columna 2
  self.layout.addLayout(self.layoutButton, 3, 2)
  
  #Establecer conexión a la base de datos MySql
  self.db = QSqlDatabase.addDatabase('QMYSQL')
  self.db.setHostName("localhost")
  self.db.setDatabaseName("usuarios")
  self.db.setUserName("root")
  self.db.setPassword("password")
  
  self.btn_insertar.clicked.connect(self.Insertar)
  self.btn_cancelar.clicked.connect(self.Cancelar)
  
 def Insertar(self):
  estado = self.db.open()
  if estado == False:
   QMessageBox.warning(self, "Error", self.db.lastError().text(), QMessageBox.Discard)
  else:
   nombre = self.txt_nombre.text()
   edad = self.txt_edad.text()
   sql = "INSERT INTO usuarios(nombre, edad) VALUES (:nombre, :edad)"
   consulta = QSqlQuery()
   consulta.prepare(sql)
   consulta.bindValue(":nombre", nombre)
   consulta.bindValue(":edad", edad)
   estado = consulta.exec_()
   if estado == True:
    QMessageBox.information(self, "Correcto", "Datos guardados", QMessageBox.Discard)
   else:
    QMessageBox.warning(self, "Error", self.db.lastError().text(), QMessageBox.Discard)
    
   self.db.close()
 
 def Cancelar(self):
  self.close()
     
app = QApplication(sys.argv)
dialogo = Dialogo()
dialogo.show()
app.exec_()


1 comentario:

Angel Trinidad dijo...

Al correr el programa, ingreso los valores y al dar Insertar, me aparece "Python dejò de funcionar", como puedo solucionar?