2017-02-28 4 views
2

Ich erstellen eine Anwendung in PyQt, wo ich eine Liste erstellen möchte, und die Listenelemente sind das Ergebnis einer SQL-Abfrage. Ich versuche, dies aus dem folgenden Code zu tun:PyQt: So erhalten Sie die Zeilenwerte aus einer Select-Abfrage

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() 

Aber was geschieht dabei ist, dass die Ausgabe eine Liste mit Elementen aus verschiedenen Spalten ist. Was ich will, ist, dass ich eine Spalte auswählen und fügen Sie alle Zeile Elemente in die Liste als Liste-Elemente kann:

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

Antwort

1

Wenn Sie eine SELECT-Anweisung mit expliziten Spaltennamen, die Spalten/Felder in das Abfrageergebnis wird in der gleichen Reihenfolge sein und von links nach rechts nummeriert, beginnend bei Null. So wird in der Aussage:

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

die lydelse Säule ist 0 und die bransch Spalte ist 1. Also alles aus der lydelse Spalte, um die Werte zu erhalten, würden Sie einfach tun:

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

Wenn Sie jedoch eine select * Anweisung verwendet wird, das nicht funktionieren kann, weil die Spalten in keiner bestimmten Reihenfolge wären. In diesem Fall sollte Ihr Code wie folgt aussehen:

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

Ah, hab's! Danke @Ekhumoro – Sarah

Verwandte Themen