我正在使用 PyCharm 编辑器 2017.3。我的蟒蛇版本是3.4
我的主要目标是将内容从数据库文件加载到 tableView 中,但在尝试之前,我尝试将内容从测试数据库文件加载到 python 控制台。
在这里,我使用称为QSQL的PyQt4内置插件
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
根据文档:
bool QSqlQuery.exec_(self, QString query(
在查询中执行 SQL。返回 true,如果查询成功,则将查询状态设置为活动;否则返回假。查询字符串必须使用适用于所查询的 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