【问题标题】:Trying to extract values from a PyQt4 QSqlQuery尝试从 PyQt4 QSqlQuery 中提取值
【发布时间】:2012-05-03 02:13:19
【问题描述】:

我不断收到错误消息,提示我的值未位于有效记录中。我已经在 MySQL 中成功执行了我的查询,但我认为我忽略了我的代码中的某些内容。

query = QtSql.QSqlQuery("select patient_id," +
                        "(SUM(IF(uom_id = 1, value, 0)) / SUM(IF(uom_id = 1, 1, 0))) AS `Average radius`," +
                        "(SUM(IF(uom_id = 2, value, 0)) / SUM(IF(uom_id = 2, 1, 0))) AS `Average Volume`," +
                        "(SUM(IF(uom_id = 3, value, 0)) / SUM(IF(uom_id = 3, 1, 0))) AS `Average SA`" +
                        "from measurements" +
                        "WHERE image_id = " + self.dbImage.id.toString() +
                        "AND status = 'A'" +
                        "GROUP BY patient_id", self.db)
query.next()

radius_acc = query.value(1).toDouble()
volume_acc = query.value(2).toDouble()
SA_acc = query.value(3).toDouble()

print('average of previously accepted measurements includes ' +
      'radius = ' + str(radius_acc) +
      'volume = ' + str(volume_acc) +
      'SA = ' + str(SA_acc))

具体我想知道我向QSqlQuery输入查询的方式是否有问题?还是我尝试错误地使用 value(n) 方法?

如果这两种情况都不是,我敢打赌,我在查询中使用了错误的 self.dbImage.id.toString() 参数,在这种情况下,我明天就问同事。

【问题讨论】:

  • 哦,不!不要用裸字符串连接构造查询。使用其中一个binding methods。如果没有这些,您的代码将对SQL Injection 开放。

标签: python pyqt4 qtsql


【解决方案1】:

要遍历结果集,您通常使用while 循环:

 while(query.next()){
     // do whatever you need with query.value()
 }

如果您只对第一行感兴趣,可以使用first(),再次使用while 循环:

 while(query.first()){
     // do whatever you need with query.value()
 }

编辑:抱歉,误解了您的问题。现在我发现您可能忘记在某些字符串中添加一些空格:

 "from measurements"

 " from measurements "
 #^ Here   and here ^^

没有这些空格,您的查询将类似于

  "...d = 3, 1, 0))) AS `Average SA`from measurementsWHERE image_id = ..."

这当然不是一个有效的查询。

【讨论】:

  • 啊哈,成功了,非常感谢!我对数据库/PyQt 很陌生,但我不会再犯这个错误了。
  • 不客气。请阅读this thread
猜你喜欢
  • 2021-08-08
  • 1970-01-01
  • 2012-01-02
  • 2016-04-06
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 2021-01-08
相关资源
最近更新 更多