PyQt:如何从选择查询中获取行值

时间:2017-02-28 14:43:02

标签: python pyqt qsqlquery

我在PyQt中创建一个应用程序,我想创建一个列表,列表项是SQL查询的结果。我试图通过以下代码执行此操作:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *

def main():  
    app  = QApplication(sys.argv)
    win=QWidget()
    layout=QHBoxLayout()
    db = QSqlDatabase.addDatabase("QODBC")
    win.setWindowTitle("Connect to MSSQL Database Example")   
    db.setHostName('LAPTOP-B79DRPA3')
    db.setDatabaseName('local')
    db.open()
    if (db.open()==False):     
      QMessageBox.critical(None, "Database Error",
                db.lastError().text())   

    query = QSqlQuery () 
    query.exec_  ("select lydelse, bransch from [Sarah].[dbo].fraga")

    listWidget = QListWidget()
    index=0
    while (query.next()):
        listWidget.addItem(str(query.value(index)))
        index = index+1
    listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
    layout.addWidget(listWidget)
    win.setLayout(layout)
    win.show()
    return app.exec_()

if __name__ == '__main__':
    main()

但是这里发生的是输出是包含来自不同列的项目的列表。我想要的是我应该能够选择一个列并将所有行项添加到列表中作为列表项:

index=0
while (query.next()):
    listWidget.addItem(str(query.value(index)))
    index = index+1

1 个答案:

答案 0 :(得分:2)

当您使用具有显式列名的select语句时,查询结果中的列/字段将采用相同的顺序,并从左到右编号,从零开始。因此,在声明中:

select lydelse, bransch from [Sarah].[dbo].fraga

lydelse列为0bransch列为1。因此,要获取lydelse列中的所有值,您只需执行以下操作:

query = QSqlQuery() 
query.exec_("select lydelse, bransch from [Sarah].[dbo].fraga")
while query.next():
    print(query.value(0))

但是,如果您使用了select *语句,则这可能不起作用,因为列将没有特定的顺序。在这种情况下,您的代码应如下所示:

query = QSqlQuery() 
query.exec_("select * from [Sarah].[dbo].fraga"):
index = query.record().indexOf('lydelse')
while query.next():
    print(query.value(index))