내 값이 유효한 레코드에 위치하지 않는다는 오류가 계속 나타납니다. MySQL에서 내 쿼리를 성공적으로 실행했지만 내 코드에서 뭔가를 간과하고 있다고 생각합니다.PyQt4 QSqlQuery에서 값 추출 중
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()에 잘못된 매개 변수를 사용하고 있습니다.이 경우 내일 동료에게 물어볼 것입니다.
while(query.first()){
// do whatever you need with query.value()
}
: 당신은 단지 첫 번째 행에 관심이 있다면
while(query.next()){
// do whatever you need with query.value()
}
, 당신이 while
루프 다시, first()
를 사용할 수 있습니다
아, 안돼! 맨손으로 문자열 연결을 사용하여 쿼리를 작성하지 마십시오. 이 [바인딩 방법] (http://qt-project.org/doc/qt-4.8/qsqlquery.html#approaches-to-binding-values) 중 하나를 사용하십시오. 이 코드가 없으면 [SQL Injection] (http://en.wikipedia.org/wiki/Sql_injection)에 공개됩니다. – Avaris