python and pyqt question
-
Hi Everyone,
I know one cannot have nested sql queries using the same query object. That does not work. The code below works, but I am wondering if this is the best method. In the first query I append the values to a list and then use a for loop to iterate over the list.
This works, but I am wondering if using a generator here makes more sense? What would you do?
self.query = QtSql.QSqlQuery() test = [] # Get id, in_iss_name, rmse, buffer_dist, unit from the database. self.query.exec_("select id, iss_name, rmse, buffer_dist, unit, comp_group_lu_id from in_iss;") while self.query.next(): id = self.query.value(0).toInt()[0] spatial_data = str(self.query.value(1).toString()) in_iss_rmse = self.query.value(2).toDouble()[0] buffer_dist = str(self.query.value(3).toString()) in_iss_unit = str(self.query.value(4).toString()) comp_group_id = self.query.value(5).toInt()[0] # Add the rmse of the issue and the in gtlf together. total_rmse = in_iss_rmse + self.gtlf_rmse test.append((id, spatial_data, in_iss_rmse, buffer_dist, in_iss_unit, comp_group_id, total_rmse)) for id, spatial_data, in_iss_rmse, buffer_dist, in_iss_unit, comp_group_id, total_rmse in test: # This converts the rmse error for all datasets. # The rmse value in the database is stored in meters. # This is why the source unit is hardcoded. total_rmse = self.converter("Meter", self.gtlf_unit, total_rmse) def converter(self, source_unit, dest_unit, amount): """ The converter method takes a source unit name and converts the amount to the destination units. In this case everything gets converted to the map units. This is done because the map projection units does not have to be the same as what the user selects. """ # Get the con factor from the unit name. This is for the source unit. # Query the database and get the con factor self.query.exec_(QtCore.QString("SELECT con_factor FROM unit_conv_lu WHERE unit = '%1'").arg(source_unit)) if self.query.next(): source_con_factor= self.query.value(0).toDouble()[0] if self.query.lastError().isValid(): return self.db_msg() # Get the con factor from the unit name. This is for the # destination unit. Query the database and get the con factor self.query.exec_(QtCore.QString("SELECT con_factor FROM unit_conv_lu WHERE unit = '%1'").arg(dest_unit)) if self.query.next(): destination_con_factor = self.query.value(0).toDouble()[0] if self.query.lastError().isValid(): return self.db_msg() conversion = amount * source_con_factor / destination_con_factor return conversion
-
Hi,
What kind of nested queries do you have in mind ?
-
-
So, do everything here in just one operation ?