Problem mit QSqlQueryModel.setQuery

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
SeamusQDraide
User
Beiträge: 2
Registriert: Freitag 16. Mai 2025, 11:44

Hallo zusammen,

ich bin neu hier im Forum und freue mich auf interessante Diskussionen!

Zur Zeit bastel ich daran herum, Datenbanken und Python besser zu verstehen. Dabei arbeite ich mit PyQt Designer und SQlite Studio, um mir das Leben zu erleichtern, die Anwendung schreibe ich im Jupyter Notebook. Und da bin ich auf ein Problem gestossen, das mich komplett ratlos macht. Hier der Code. Ich habe einiges rausgelöscht, was ich für mein Problem für unwesentlich halte. Wenn was Wichtiges fehlen sollte: Vielleicht ist das der Grund...

Code: Alles auswählen

from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidgetItem
from PySide6 import QtSql, QtCore, QtGui, QtWidgets
from WiO_config import programmpfad #WiO ist mein persönlicher Name für das Projekt. In Config steckt bislang vor allem der Ablageort
os.chdir(programmpfad)
import WiO_functions as WiO_func #WiO_func ist eine Sammlung Datenbankfunktionen, die ich in allen Formularen benutze

os.chdir(programmpfad +  "Forms")
from Assessments.frmIndications import Ui_frmIndications

class Frm_Indications(QMainWindow, Ui_frmIndications):
    
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        #Variablen (es gibt natürlich mehr als hier gezeigt, die haben m. E. aber nichts mit dem Problem zu tun)

        self.database_assess = 'Pfad zur gewünschten DB'
        self.query = 'qryIndication'

        #Verbindung zur Datenbank
        self.db_assess = QtSql.QSqlDatabase.addDatabase("QSQLITE", self.database_assess)
        self.db_assess.setDatabaseName(programmpfad + self.database_assess)
        self.db_assess.open()
        self.mod_Indication = QtSql.QSqlQueryModel #Dieses Modell soll am Ende die Daten enthalten, die ich an einen QTableView übergeben will
        
#Es folgt ein Haufen Code zur Einrichtung des Formulars. Der Spaß geht los, wenn ich mein Modell über setQuery() mit Daten füllen willl. Das geschieht durch Aufruf von Search()

    def Search(self):
	#create_WHERE() bastelt aus den Listen 'Select...' und '_map' einen WHERE String : "datenfeld1 LIKE '%Inhalte Formularfeld1 %'..." 
        WHERE = WiO_func.create_WHERE(select_datafields, self.data_map, select_cbo, self.cbo_map, select_txt, self.txt_map)       
        self.mod_Indication.setQuery("SELECT * FROM qryIndication " + WHERE, db = self.db_assess)
Wenn ich das oben laufen lasse, bekomme ich als Fehlermeldung:

Code: Alles auswählen

TypeError: descriptor 'setQuery' for 'PySide6.QtSql.QSqlQueryModel' objects doesn't apply to a 'str' object
Was ich vollkommen gar nicht verstehe, denn das hier ist direkt aus der Qt-Doku:

PySide2.QtSql.QSqlQueryModel.setQuery(query[, db=QSqlDatabase()])

Parameters:

query – str

db – PySide2.QtSql.QSqlDatabase

This is an overloaded function.

Executes the query query for the given database connection db . If no database (or an invalid database) is specified, the default connection is used.

Und das hier ist Beispielcode aus der Dokumentation:

Code: Alles auswählen

model = QSqlQueryModel()
model.setQuery("SELECT * FROM employee")
salary = model.record(4).value("salary")
Was läuft hier schief? Vielen Dank für eure Hilfe!
SeamusQDraide
User
Beiträge: 2
Registriert: Freitag 16. Mai 2025, 11:44

Problem gelöst: Fehlende Klammern in
self.mod_Indication = QtSql.QSqlQueryModel
Korrekt:
self.mod_Indication = QtSql.QSqlQueryModel()
Antworten