我写了一种从数据库获取数据的方法。

def connect():
connection = pymssql.connect(".","sa", "1234","Deneme")
cursor = connection.cursor()
cursor.execute("select BolumAdi from BOLUMLER")
return cursor.fetchone()  //problem is here


此方法从数据库获取一个数据并使用它:

def main():

app     = QtGui.QApplication(sys.argv)
edit    = QtGui.QLineEdit()
list = connect()
completer   =QtGui.QCompleter(list,edit)
edit.setWindowTitle("PyQT QLineEdit Auto Complete")
edit.setCompleter(completer)
edit.show()

sys.exit(app.exec_())

if __name__ == '__main__':
main()


效果不错。但这只显示一个数据,因为cursor.fetchone()以上。当我更改此行cursor.fetchall()时,我可以从数据库中获取所有数据,但这一次引发异常:

TypeError: arguments did not match any overloaded call:
QCompleter(QObject parent=None): argument 1 has unexpected type 'list'
QCompleter(QAbstractItemModel, QObject parent=None): argument 1 has unexpected type 'list'
QCompleter(list-of-str, QObject parent=None): argument 1 has unexpected type 'list'


那是什么问题呢?

最佳答案

因为当您使用fetchone()时它可以工作,这意味着正在使用QCompleter的第三个构造函数。如果fetchone()返回一个“记录”,即字符串的元组(每选定的列一个),这是有意义的。由于fetchall()返回记录列表,并且您只需要每个记录的第一个字段,因此需要首先提取数据:

# strings = connect()  # if fetchone()
strings = [item[0] for item in connect()]  # if fetchall()
completer = QtGui.QCompleter(strings)

07-24 09:52
查看更多