PyQt:如何从 select 查询中获取行值
PyQt: How to get the row values from a select query
我正在 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()
但是这里发生的事情是输出是一个列表,其中包含来自不同列的项目。我想要的是我应该能够 select 一列并将所有行项作为列表项添加到列表中:
index=0
while (query.next()):
listWidget.addItem(str(query.value(index)))
index = index+1
当您使用带有显式列名的select 语句时,查询结果中的columns/fields 将按相同的顺序从左到右编号,从零开始。因此,在语句中:
select lydelse, bransch from [Sarah].[dbo].fraga
lydelse
列是 0
,bransch
列是 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))
我正在 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()
但是这里发生的事情是输出是一个列表,其中包含来自不同列的项目。我想要的是我应该能够 select 一列并将所有行项作为列表项添加到列表中:
index=0
while (query.next()):
listWidget.addItem(str(query.value(index)))
index = index+1
当您使用带有显式列名的select 语句时,查询结果中的columns/fields 将按相同的顺序从左到右编号,从零开始。因此,在语句中:
select lydelse, bransch from [Sarah].[dbo].fraga
lydelse
列是 0
,bransch
列是 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))