[PyQt4] SQL-Verbindungsproblem

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Ich versuch gerade mittels Modul QtSql eine Verbindung zu einer sqlite3 DB aufzubauen:

Code: Alles auswählen

from PyQt4.QtSql import (QSqlDatabase, QSqlQuery, QSqlRelation,
        QSqlRelationalDelegate, QSqlRelationalTableModel)


db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("personenverwaltung.db")
db.open()
Leider erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers: 
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins
Unter C:\Python27\Lib\site-packages\PyQt4\plugins\sqldrivers sind bei mir folgende 4 .dll Dateien:

- qsqlite4.dll
- qsqlmysql4.dll
- qsqlodbc4.dll
- qsqlpsql4.dll

Wo könnte das Problem liegen?
Ich nutze Eclipse+PyDev.
BlackJack

@lackschuh: Die Fehlermeldung ist IMHO *sehr* deutlich.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Auch wenn ich fertige Beispielprogramme versuche zu öffnen, kommt die Meldung.

Wenn ich im obigen Beispiel davor noch

Code: Alles auswählen

app = QApplication(sys.argv)
einfüge, kommt die Meldung, dass das Laden des Treibers fehlgeschlagen ist. Zwar kommt dann die Instanzmeldung nicht mehr, der Rest bleibt gleich...

mfg
deets

Bitte die *genaue* Fehlermeldung.
lunar

Und bitte auch vollständigen Quelltext zu dieser Fehlermeldung.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Die Ursache muss wohl an meinem System liegen, denn Zuhause funktioniert alles super. Habs gerade getestet.

Ein einfaches Beispiel:

Code: Alles auswählen

from PyQt4.QtSql import QSqlQueryModel,QSqlDatabase,QSqlQuery
from PyQt4.QtGui import QTableView,QApplication
import sys

app = QApplication(sys.argv)

db = QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("personenverwaltung.db")
db.open()

projectModel = QSqlQueryModel()
projectModel.setQuery("SELECT * FROM person",db)

projectView = QTableView()
projectView.setModel(projectModel)

projectView.show()
app.exec_()
Geht auf dem einen Rechner und auf dem anderen geht es nicht mehr. Die genaue Fehlermeldung habe ich oben schon gepostet. Mehr wird mir nicht angezeigt. Ich weiss nicht, ob es damit zusammenhängt, dass ich erst kürzlich PySide mittels Deinstaller runter geschmissen habe oder sonst was gelöscht/verstellt habe...
lunar

@lackschuh Die Fehlermeldung Deines ersten Beitrags erhältst Du, weil Du kein "QApplication"-Exemplar erzeugt hast. Wir würden gerne noch die Fehlermeldung sehen, die Du mit einem solchen Exemplar, sprich mit dem Quelltext Deines letzten Beitrags, erhältst. :)

Ansonsten bleibt uns nur, festzustellen, dass die Datenbanktreiber von Qt nicht installiert sind. Woran das liegt, lässt sich nur sagen, wenn Du uns beschreibst, wie Du PyQt installiert, und was Du bei Deinem Aufräumversuchen alles gelöscht hast.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hi, erst mal danke für die Inputs.

Folgende Fehlermeldung kommt beim obigen Code:

Code: Alles auswählen

QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers: 
QSqlQuery::exec: database not open

PySide habe ich mittels WinInstaller (msi) installiert und dann mit RevoUninstaler deinstalliert.
PyQt4 habe ich auch mittels Windows Installer installiert.
lunar

@lackschuh Bitte installiere PyQt erneut, um sicherzustellen, dass Deine Aufräumaktion bezüglich PySide die PyQt-Installation nicht beschädigt hat. Dann lasse Dir in Deinem Programm bitte "QApplication.libraryPaths()" und "QSqlDatabase.drivers()" ausgeben.

Was ist der RevoUninstaller? Wieso verwendest Du zur Deinstallation von Programmen nicht die eingebaute Funktionalität von Windows?
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Ich installiere PyQt morgen neu und probiere es aus und melde mich dann wieder.
Revo Uninstaller ist ein Uninstall-Tool, dass auch die Registry-Einträge entfernt.

Als ich PySide installiert hab, funktionierten sämtliche PyQt-Skripte nicht mehr. In Eclipse war fast alles rot. Sachen wie zB QTableView() wurden nicht mehr erkannt. Nach dem deinstallieren ging es wieder, ausser halt SQL. Aber ich installiere es neu.
lunar

@lackschuh Welche Registry-Einträge?

So wie ich die Beschreibung auf der Website gelesen habe, rät das Programm, welche Daten eine Anwendung möglicherweise hinterlassen haben könnte, und entfernt diese dann einfach, ohne zu prüfen, ob diese Daten tatsächlich entfernt dürfen, und nicht beispielsweise von einem anderen Programm noch benötigt werden. Es darf Dich nicht wundern, dass Dein System (oder Teile davon) sich unerwartet verhält, wenn Du ein solches Programm verwendest. Nicht auszuschließen, dass die Deinstallation von PySide mithilfe dieses Programms auch Teile Deiner PyQt-Installation entfernt hat.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Hab nun PyQt neu installiert und nun geht es wieder. Vielen Dank.
Antworten