[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