2012-05-03 2 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() в моем запросе, и в этом случае я просто спрошу сотрудника завтра.

+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 цикла:

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 = ..." 

который, конечно, это недействительный запрос.

+0

Ahhhh, который сделал это, большое спасибо! Я очень новичок в базах данных/PyQt, но я не буду повторять эту ошибку. – homiewitha40

+0

Добро пожаловать. Пожалуйста, прочитайте [эту тему] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – dschulz