PySide数据库类学习QSqlQuery(一)

前提是你 提交于 2020-03-17 02:07:43

某厂面试归来,发现自己落伍了!>>>

 

QSqlQuery

摘要

函数

·                                 def addBindValue (val[, type=QSql.In])

·                                 def at ()

·                                 def bindValue (placeholder, val[, type=QSql.In])

·                                 def bindValue (pos, val[, type=QSql.In])

·                                 def boundValue (placeholder)

·                                 def boundValue (pos)

·                                 def boundValues ()

·                                 def clear ()

·                                 def driver ()

·                                 def execBatch ([mode=ValuesAsRows])

·                                 def exec_ ()

·                                 def exec_ (query)

·                                 def executedQuery ()

·                                 def finish ()

·                                 def first ()

·                                 def isActive ()

·                                 def isForwardOnly ()

·                                 def isNull (field)

·                                 def isSelect ()

·                                 def isValid ()

·                                 def last ()

·                                 def lastError ()

·                                 def lastInsertId ()

·                                 def lastQuery ()

·                                 def next ()

·                                 def nextResult ()

·                                 def numRowsAffected ()

·                                 def numericalPrecisionPolicy ()

·                                 def prepare (query)

·                                 def previous ()

·                                 def record ()

·                                 def result ()

·                                 def seek (i[, relative=false])

·                                 def setForwardOnly (forward)

·                                 def setNumericalPrecisionPolicy (precisionPolicy)

·                                 def size ()

·                                 def value (i)

细节描述

PySide.QtSql.QSqlQuery 提供执行SQL语句的方法。

PySide.QtSql.QSqlQuery 可以执行标准的DMLDDL,也可以执行专有的数据库语句。

如果成功执行SQL语句,设置query 的状态为活动的,所以PySide.QtSql.QSqlQuery.isActive()返回true,否则查询状态设为非活动的。

当执行一个新的SQL语句,query将固定在一个有效的记录位置,你可以使用以下函数进行导航:

·   PySide.QtSql.QSqlQuery.next()

·   PySide.QtSql.QSqlQuery.previous()

·   PySide.QtSql.QSqlQuery.first()

·   PySide.QtSql.QSqlQuery.last()

·   PySide.QtSql.QSqlQuery.seek()

这些函数提供了向前,向后 或任意查询返回记录的方法,你也可以用PySide.QtSql.QSqlQuery.setForwardOnly()来设置仅向前查询记录。

获取记录内容可以使用 PySide.QtSql.QSqlQuery.value()方法。

例如:

query = QSqlQuery("SELECT country FROM artist")

while query.next():

    country = query.value(0)

    doSomething(country)

使用value(int)函数时,int表示字段的位置,起始值是0.

使用”select * from….”进行查询时,请注意字段位置所对应的int值,以免发生顺序错误。

在有些请况想引用具体字段的值,可以使用PySide.QtSql.QSqlQuery.record(). PySide.QtSql.QSqlRecord.indexOf()函数来确定int的值。

:

query = QSqlQuery("SELECT * FROM artist")

fieldNo = query.record().indexOf("country")

while query.next():

    country = query.value(fieldNo)

    doSomething(country)

PySide.QtSql.QSqlQuery支持占位符绑定参数

可以用 PySide.QtSql.QSqlQuery.numRowsAffected()PySide.QtSql.QSqlQuery.size() 来检测多少条数据受影响,和检索了多大的数据。

以下是占位符绑定的例子:

使用名字绑定:

query = QSqlQuery()

query.prepare("INSERT INTO person (id, forename, surname) "

              "VALUES (:id, :forename, :surname)")

query.bindValue(":id", 1001)

query.bindValue(":forename", "Bart")

query.bindValue(":surname", "Simpson")

query.exec_()

根据位置绑定:

query = QSqlQuery()

query.prepare("INSERT INTO person (id, forename, surname) "

              "VALUES (:id, :forename, :surname)")

query.bindValue(0, 1001)

query.bindValue(1, "Bart")

query.bindValue(2, "Simpson")

query.exec_()

使用占位符绑定值 (版本1):

query = QSqlQuery()

query.prepare("INSERT INTO person (id, forename, surname) "

              "VALUES (?, ?, ?)")

query.bindValue(0, 1001)

query.bindValue(1, "Bart")

query.bindValue(2, "Simpson")

query.exec_()

使用占位符绑定值 (版本2):

query = QSqlQuery()

query.prepare("INSERT INTO person (id, forename, surname) "

              "VALUES (?, ?, ?)")

query.addBindValue(1001)

query.addBindValue("Bart")

query.addBindValue("Simpson")

query.exec_()

使用存储过程绑定的例子:

 AsciiToInt() 是存储过程,通过参数传递绑定。

query = QSqlQuery()

query.prepare("CALL AsciiToInt(?, ?)")

query.bindValue(0, "A")

query.bindValue(1, 0, QSql.Out)

query.exec_()

i = query.boundValue(1) # i is 65

注,哪些未绑定参数的将保留其值。

存储过程使用return语句返回一个值或多个结果集。但需要数据库驱动支持。

警告:建立 PySide.QtSql.QSqlQuery前必须加载驱动并打开连接。同时这个连接必须保持打开,否则是一种未定义的行为。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!