如何在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
我正在使用 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