如何在pyqt中将数据库文件的内容显示到控制台

How to show contents from a database file into console in pyqt

我正在使用 PyCharm 编辑器 2017.3。我的 python 版本是 3.4
我的主要目标是将数据库文件中的内容加载到 tableView 中,但在尝试之前我试图将测试数据库文件中的内容加载到 python 控制台。

这里我使用 PyQt4 的内置插件 QSQL

from PyQt4.QtGui import *
site_pack_path = "C:\Python34\Lib\site-packages"
QApplication.addLibraryPath('{0}\PyQt4\plugins'.format(site_pack_path))
from PyQt4.QtSql import *
import sys

然后我创建了一个数据库文件并尝试将其中的内容加载到 console.All 下面提到的内容是用相同的函数编写的。

db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('sports.db')

if not db.open():
    QMessageBox.critical("Cannot open database")

    return False

query = QSqlQuery()

query.exec_("create table sportsmen(id int primary key, "
            "firstname varchar(20), lastname varchar(20))")

query.exec_("insert into sportsmen values(101, 'Roger2', 'Federer')")
query.exec_("insert into sportsmen values(102, 'Christiano', 'Ronaldo')")
query.exec_("insert into sportsmen values(103, 'Ussain', 'Bolt')")
query.exec_("insert into sportsmen values(104, 'Sachin', 'Tendulkar')")
query.exec_("insert into sportsmen values(105, 'Saina', 'Nehwal')")





print(query.exec_("SELECT * FROM sportsmen"))
return True

虽然创建了名为 sports.db 的数据库文件,甚至填充了测试数据,但我无法从那里获取内容到我的控制台。
控制台没有显示错误并打印 True

根据 docs:

bool QSqlQuery.exec_(self, QString query)

Executes the SQL in query. Returns true and sets the query state to active if the query was successful; otherwise returns false. The query string must use syntax appropriate for the SQL database being queried (for example, standard SQL).

[...]

也就是说,它returns查询的状态,如果我们想要获取值,我们必须使用query.value()将我们想要获取的列传递给它(),此外只要有数据,next() 方法就为真。

if query.exec_("SELECT * FROM sportsmen"):
    rec = query.record()
    while query.next():
        for ix in range(rec.count()):
            val = query.value(ix)
            print(rec.fieldName(ix), val)
else:
    print(query.lastError().text())

输出:

id 101
firstname Roger2
lastname Federer
id 102
firstname Christiano
lastname Ronaldo
id 103
firstname Ussain
lastname Bolt
id 104
firstname Sachin
lastname Tendulkar
id 105
firstname Saina
lastname Nehwal