美文网首页
PyQt5编程(39)—使用数据库(5)

PyQt5编程(39)—使用数据库(5)

作者: 用电热毯烤猪 | 来源:发表于2018-01-01 21:57 被阅读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_()
    

    相关文章

      网友评论

          本文标题:PyQt5编程(39)—使用数据库(5)

          本文链接:https://www.haomeiwen.com/subject/ppdxnxtx.html