PyQt5编程(39)—使用数据库(5)
2018-01-01 本文已影响0人
用电热毯烤猪
3.执行SQL查询并读取结果
PyQt5的QSqlQuery类用来实现创建表和索引,查询、添加、更改和删除数据库。
3.1 执行查询
要查询数据库,必须先创建一个QSqlQuery类的实例。 QSqlQuery类的构造函数:
QSqlQuery([QString query = QString()[[,] [QSqlDatabase db = QSqlDatabase()]), query为SQL语句;db为连接的数据库。如果db未指定,则使用默认连接。
QSqlQuery(QSqlDatabase db):和上一构造函数相比,只是没有指定查询语句。
QSqlQuery(QSqlQuery other):和第一个构造函数相比,没有指定连接的数据库。
QSqlQuery类的方法有(详见http://doc.qt.io/qt-5/qsqlquery.html):
exec(QString query): 执行query查询语句。查询执行后,必须通过使用next()等函数,定位到一个有效的记录,才能读取数据库记录。
prepare(QString query): 准备SQL查询语句。适用于带参数的查询语句。查询代码中的参数可以用ODBC样式(问号)或Oracle样式(符号前面加冒号)来指定,但是它们不能混合在同一个查询中。
addBindValue(QVariant val[, QSql.ParamType paramType = QSql.In]):使用位置值绑定时,将值val添加到值列表中。 addBindValue( )调用的顺序决定了此值 绑定到prepare()函数参数中的哪个占位符。可选参数paramType 默认值为QSql.In,表明是往数据库中写入数据;QSql.Out为从数据库中读出数据;QSql.InOut为往数据库中写入数据,但执行exec()后,会被读出的数据覆盖。
bindValue(int pos, const QVariant val, QSql.ParamType paramType = QSql.In):指定prepare()函数参数中的pos占位符的值为val。pos=0代表第一个占位符。
query.prepare ("insert into good values (null,?,?)")
query.bindValue (0, 'Floppy')
query.bindValue (1, 10)
query.exec()
bindValue(QString placehold, const QVariant val, QSql.ParamType paramType = QSql.In):指定prepare()函数参数中的placehold占位符的值为val。
query .prepare("insert into good values(null, :name, : count )")
query.bindValue("rname", 'Floppy')
query.bindValue(":count", 10)
query.exec()
exec():执行prepare()中的SQL语句。 如果执行成功,返回True; 否则,返回False。
execBatch(QSqlQuery.BatchExecutionMode mode = ValuesAsRows):批处理中执行先前准备好的SQL查询。 所有绑定参数必须是列表。 如果数据库不支持批处理执行,驱动程序将使用传统的exec()调用来模拟它。
query.prepare("insert into good values(null, :name, :count)")
lst1 = ['Diskette', 'Printer paper', 'Printer drum']
lst2 = [10, 3, 8]
query.bindValue(':name', lst1)
query.bindValue(':count', lst2)
query.execBatch()
setForwardOnly(Bool forward):如果参数forward为True,查询结果只能向前移动,即从头到尾。设置为只向前移动可以节约大量的系统资源。该方法要在exec()之前调用。如:
query.prepare("select * from good order by goodname")
query.setForwardOnly(True)
query.exec_()