2012-05-03 1 views
1

내 값이 유효한 레코드에 위치하지 않는다는 오류가 계속 나타납니다. 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()를 사용할 수 있습니다

+0

아, 안돼! 맨손으로 문자열 연결을 사용하여 쿼리를 작성하지 마십시오. 이 [바인딩 방법] (http://qt-project.org/doc/qt-4.8/qsqlquery.html#approaches-to-binding-values) 중 하나를 사용하십시오. 이 코드가 없으면 [SQL Injection] (http://en.wikipedia.org/wiki/Sql_injection)에 공개됩니다. – Avaris

답변

2

는 보통 while 루프를 사용하여 결과 집합을 반복하려면

편집 : 죄송합니다. 귀하의 문제를 이해하지 못했습니다. 지금은 당신이 가능하게 일부 문자열의 일부 공간을 넣어 잊었 참조 :이 공백없이

"from measurements" 

" from measurements " 
#^ Here and here ^^ 

에, 쿼리는

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

같이 보일 것이다 물론 유효한 쿼리가 아닙니다.

+0

아, 그 덕분에 많이 했어! 나는 데이터베이스/PyQt에 새로운 것이지만, 나는 그 실수를 다시하지 않을 것이다. – homiewitha40

+0

반갑습니다. [이 스레드] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)를 읽어보십시오. – dschulz