我正在使用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
然后我创建了一个数据库文件并尝试将其中的内容加载到控制台中。以下提到的内容都是用同一个函数编写的。
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查询)
在查询中执行SQL。如果查询成功,则返回true并将查询状态设置为活动状态;否则返回false。查询字符串必须使用适合于要查询的SQL数据库的语法(例如,标准SQL)。
[...]
也就是说,它返回查询的状态,如果我们想要获取值,我们必须使用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