[pyar] DRIVER NOT LOADED

Roberto Matarrita rmatarria en gmail.com
Mar Jul 25 01:13:32 ART 2017


Buenas noches, mi nombre es Roberto Matarrita de Costa Rica, soy nuevo en
esta comunidad y estoy comenzando con python y postgresql. Tengo la version
de Python 3.5.0 instalada y el pyqt5. Tengo el siguiente problema.

En el codigo que les envio hay dos formas de insertar datos, el primero me
funciona perfectamente las inserciones a la base de datos en la tabla
usuarios que tengo.

Pero cuando quiero hacer una apertura de la base de datos de segunda forma,
que es gráfica, no he podido lograr que los datos se inserten, porque me da
el mensaje que les envío y lo que pasa es que no me quiere abrir la base de
datos. Ya he buscado en internet y no he podido hacer que se abra la base
de datos.

Mucho agradecería si me pueden ayudar ya que desconozco que es lo que me
esta sucediendo. Tengo windows 10 de 64 bits instalado en mi portátil.



import sys
import psycopg2 #archivo de conexcion a postgresql
import pprint
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)


##Aqu´es donde se da el problema que no abre la base de datos.

  #Establecer conexión a la base de datos Postgresql
  self.db = QSqlDatabase.addDatabase('postgres')
  self.db.setHostName('localhost')
  self.db.setDatabaseName('municipal')
  self.db.setUserName('postgres')
  self.db.setPassword('Administra8080')
  estado = self.db.open()



  self.btn_insertar.clicked.connect(self.Insertar)
  self.btn_cancelar.clicked.connect(self.Cancelar)

  if estado == False:
     print("me fui por la parte del error")
     QMessageBox.warning(self, "Error", self.db.lastError().text(),
QMessageBox.Discard)
   else:
   nombre = self.txt_nombre.text()
   edad = self.txt_edad.text()

 def Insertar(self):

#Variable de conexcion
#Esta parte del codigo funciona correctamente
  cadenaconexcion="host='localhost' dbname='municipal' user='postgres'
password='Administra8080'"
  #Imprimir cadena de conexcion, para verificar errores.
  ##print("Cadena Conexcion a la BD\n ->%s"%(cadenaconexcion))
  nombres = self.txt_nombre.text()
  edad    = self.txt_edad.text()
  print (nombres)



  obj=psycopg2.connect(cadenaconexcion)

  #Ejecutar consulta de la BD
  objCursor=obj.cursor()

  objCursor.execute("INSERT INTO USUARIOS(id,nombre, edad)
 VALUES(%s,%s,%s)",(edad,nombres,edad))
  ##objCursor.execute("INSERT INTO USUARIOS(id,nombre, edad)
 VALUES(4,nombres,70)")
  obj.commit()

  objCursor.execute ("SELECT * FROM USUARIOS;")
  #Leer Registros
  registros=objCursor.fetchall()
  #imprimir loos Registros
  pprint.pprint(registros)

  objCursor.close()
  obj.close()


  estado = self.db.open()
  if estado == False:
   print("me fui por la parte del error")
   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_()
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20170724/1f8044ec/attachment-0001.html>


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