Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
PySide2 y PostgreSql
#1
hola amigos mi pregunta es la siguiente hice una app para mostrar unos datos en un QTableView, pero cuando corro el programa me sale el siguiente mensaje: Error al abrir la base de datos Driver not loaded Driver not loaded, aqui les dejo el codigo de mi programa aver que me recominedan o que estoy haceindo mal.


este es el codigo de mi form principal
Código:
from PySide2.QtCore import QMetaObject, Qt
from PySide2.QtWidgets import QWidget, QApplication, QSpacerItem, QSizePolicy, QTableView, QPushButton, QVBoxLayout, QHBoxLayout, QStyleFactory, QMessageBox
from PySide2.QtGui import QIcon
from PySide2.QtSql import QSqlDatabase, QSqlTableModel, QSqlError
from dlgAddUser import Ui_dlgAddUser

class Ui_frmPricnipal(QWidget):

   def __init__(self):
       super().__init__()
       self.setupUi()

   def setupUi(self):
       self.setObjectName("frmPricnipal")
       self.resize(363, 242)
       self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
       self.loadData()

       self.verticalLayout = QVBoxLayout(self)
       self.verticalLayout.setObjectName("verticalLayout")
       self.tvLista = QTableView(self)
       self.tvLista.setObjectName("tvLista")
       self.verticalLayout.addWidget(self.tvLista)
       self.horizontalLayout = QHBoxLayout()
       self.horizontalLayout.setObjectName("horizontalLayout")
       spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
       self.horizontalLayout.addItem(spacerItem)
       self.pbRemove = QPushButton(self)
       self.pbRemove.setObjectName("pbRemove")
       self.horizontalLayout.addWidget(self.pbRemove)
       self.pbAdd = QPushButton(self)
       self.pbAdd.setObjectName("pbAdd")
       self.pbAdd.clicked.connect(self.openDialog)
       self.horizontalLayout.addWidget(self.pbAdd)
       self.verticalLayout.addLayout(self.horizontalLayout)

       self.retranslateUi()
       QMetaObject.connectSlotsByName(self)

   def openDialog(self):
       dlgNewUser=Ui_dlgAddUser()
       dlgNewUser.exec_()

   def retranslateUi(self):
       self.setWindowTitle(QApplication.translate("frmPricnipal", "Lista de usuarios", None, -1))
       self.pbRemove.setText(QApplication.translate("frmPricnipal", "Remove", None, -1))
       self.pbAdd.setText(QApplication.translate("frmPricnipal", "Add", None, -1))

   def loadData(self):
       self.db=QSqlDatabase.addDatabase("QPSQL")
       if(not self.db.isDriverAvailable("QPSQL")):
           QMessageBox.critical(self,qApp.applicationName(),"Error al cargar el controlador"+self.db.lastError().text())
           return

       self.db.setPort(5432)
       self.db.setDatabaseName("ejemplo")
       self.db.setUserName("postgres")
       self.db.setPassword("2311046")
       if(not self.db.open()):
           QMessageBox.critical(self,qApp.applicationName(),"Error al abrir la base de datos"+self.db.lastError().text())
           return
       model=QSqlTableModel(self)
       model.setTable("usuarios")
       model.select()
       self.tvLista.setModel(model)



if __name__ == "__main__":
   import sys
   app = QApplication(sys.argv)
   app.setWindowIcon(QIcon("img/appIcon.png"))
   app.setStyle(QStyleFactory.create("Fusion"))
   frmPricnipal = Ui_frmPricnipal()
   frmPricnipal.show()
   sys.exit(app.exec_())

y este es el codigo de mi form secundario donde quiero ingresar datos

Código:
from PySide2.QtCore import QMetaObject, Qt
from PySide2.QtWidgets import QPushButton, QVBoxLayout, QHBoxLayout, QLineEdit, QGroupBox, QGridLayout, QDialog, QSizePolicy, QSpacerItem, QApplication

class Ui_dlgAddUser(QDialog):
   def __init__(self):
       super().__init__()
       self.setupUi()

   def setupUi(self):
       self.setObjectName("dlgAddUser")
       self.resize(335, 154)
       self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
       self.gridLayout = QGridLayout(self)
       self.gridLayout.setObjectName("gridLayout")
       self.groupBox = QGroupBox(self)
       self.groupBox.setObjectName("groupBox")
       self.verticalLayout = QVBoxLayout(self.groupBox)
       self.verticalLayout.setObjectName("verticalLayout")
       self.leFullName = QLineEdit(self.groupBox)
       self.leFullName.setObjectName("leFullName")
       self.verticalLayout.addWidget(self.leFullName)
       self.leUsuario = QLineEdit(self.groupBox)
       self.leUsuario.setObjectName("leUsuario")
       self.verticalLayout.addWidget(self.leUsuario)
       self.lePassword = QLineEdit(self.groupBox)
       self.lePassword.setObjectName("lePassword")
       self.lePassword.setEchoMode(QLineEdit.Password)
       self.verticalLayout.addWidget(self.lePassword)
       self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
       self.horizontalLayout = QHBoxLayout()
       self.horizontalLayout.setObjectName("horizontalLayout")
       spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
       self.horizontalLayout.addItem(spacerItem)
       self.pbAddUser = QPushButton(self)
       self.pbAddUser.setObjectName("pbAddUser")
       self.horizontalLayout.addWidget(self.pbAddUser)
       self.pbCancel = QPushButton(self)
       self.pbCancel.setObjectName("pbCancel")
       self.horizontalLayout.addWidget(self.pbCancel)
       self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1)

       self.retranslateUi()
       QMetaObject.connectSlotsByName(self)

   def retranslateUi(self):
       self.setWindowTitle(QApplication.translate("dlgAddUser", "Dialog", None, -1))
       self.groupBox.setTitle(QApplication.translate("dlgAddUser", "GroupBox", None, -1))
       self.leFullName.setPlaceholderText(QApplication.translate("dlgAddUser", "Ingresar nombre completo", None, -1))
       self.leUsuario.setPlaceholderText(QApplication.translate("dlgAddUser", "Ingrese nombre de usuario", None, -1))
       self.lePassword.setPlaceholderText(QApplication.translate("dlgAddUser", "Ingrese su clave", None, -1))
       self.pbAddUser.setText(QApplication.translate("dlgAddUser", "Add user", None, -1))
       self.pbCancel.setText(QApplication.translate("dlgAddUser", "Cancel", None, -1))


es urgente por favor, gracias de antemano.

nota: adjunto el archivo de la base de datos en formato .sql gracias


Archivos adjuntos
.zip   database.zip (Tamaño: 1,1 KB / Descargas: 0)
Responder
#2
Hola lincoln. El error es muy vago y podría deberse a muchas cosas. Tal vez tu instalación de PySide no fue compilada con el driver que estás intentando utilizar. Te sugiero que pruebes lo siguiente: https://stackoverflow.com/questions/2331...se-drivers.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(08-01-2019, 05:43 PM)Francisco escribió: Hola lincoln. El error es muy vago y podría deberse a muchas cosas. Tal vez tu instalación de PySide no fue compilada con el driver que estás intentando utilizar. Te sugiero que pruebes lo siguiente: https://stackoverflow.com/questions/2331...se-drivers.

Saludos

Gracias amigo pero encontre el error, lo que pasa es que instale la version 11 de postgreSql que es solo pa 64 bits mientras que tenia el python 3.7 de 32 bits, asi que instale la version 10 de psotgreSql, otra de las cosas que hice fue copiar algunas dll de la carpeta bin del postgreSql a la carpeta de instalacion del python y con eso solucione mi problema gracias de todas maneras saludos.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)