PySide6中QSqlQueryModel.setQuery()传字符串报错排查
问题描述
我正在使用PySide6开发,尝试调用setQuery方法结合指定数据库填充QSqlQueryModel,但遇到错误:TypeError: descriptor 'setQuery' for 'PySide6.QtSql.QSqlQueryModel' objects doesn't apply to a 'str' object。尽管文档说明该方法接受字符串参数,实际运行却报错。
相关代码片段
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidgetItem from PySide6 import QtSql, QtCore, QtGui, QtWidgets from WiO_config import programmpfad #WiO是我的项目名称,Config中存储程序路径('Programmpfad')为字符串 os.chdir(programmpfad) import WiO_functions as WiO_func #WiO_func是我在各种场景中使用的函数集合 os.chdir(programmpfad + "Forms") from Assessments.frmIndications import Ui_frmIndications class Frm_Indications(QMainWindow, Ui_frmIndications): def __init__(self): super().__init__() self.setupUi(self) # 变量(还有更多变量,但与当前问题无关) self.database_assess = '目标数据库路径' self.query = 'qryIndication' # 数据库连接 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 # 这个模型后续要用来在QTableView中展示数据 # 问题出在尝试用setQuery填充模型时,调用Search()方法触发 def Search(self): # create_WHERE()使用列表'Select...'和'_map'构造SQL WHERE子句:"datenfeld1 LIKE '%表单字段1内容%'..." 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)
错误信息
TypeError: descriptor 'setQuery' for 'PySide6.QtSql.QSqlQueryModel' objects doesn't apply to a 'str' object
问题原因与解决方案
- 核心错误:你没有创建
QSqlQueryModel的实例,而是直接把类本身赋值给了self.mod_Indication。setQuery是实例方法,必须调用在类的实例上,而不是类本身。 - 修复代码:在初始化模型时,添加括号创建实例:
self.mod_Indication = QtSql.QSqlQueryModel() # 注意这里的括号 - 验证说明:修改后,
self.mod_Indication成为QSqlQueryModel的实例,此时调用setQuery传入SQL字符串和数据库对象即可正常执行。
内容的提问来源于stack exchange,提问作者Seamus Draide
相关产品推荐
相关产品推荐

