Python - DRIVER NOT LOADED DRIVER NOT LOADED

   
Vista:

DRIVER NOT LOADED DRIVER NOT LOADED

Publicado por Roberto Matarrita rmatarria@gmail.com (51 intervenciones) el 24/07/2017 07:21:32
Ya habia publicado este error. Pero ahora les pongo el código que utilizo para ver si me pueden ayudar. Utilizo Python 3.5, con PYQT5.

Como observan hay dos inserciones a la base de datos. La primera con esa cadena de conexión, me funciona correctamente. Pero cuando trato de hacer el proceso segundo utilizando el siguiente código no puedo abrir la base de datos. Instale este proceso import psycopg2, pero aún asi no entiendo el porque no puedo abrir la base de datos. Desconozco si será la versión de python que utilizo y no entiendo porque en un lado si lo hace y en otro no.
Mucho agradeceria me ayudaran.

Roberto
Costa Rica.

1
2
3
4
5
6
7
#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()

Aquí comienza todo el código, incluso lo pueden correr, la tabla es id number, nombre varchar(50), edad number(2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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)
 
 
 
 
  #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)
 
 
 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()
 
 
  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))
  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("No deja abrir la base de datos")
   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_()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder