One last part of the puzzle, this all works ok at the command line with print row[mysum] but I cannot get the syntax for using this in a view
for example:- controller DAL query:- def mileage(): mysum = db.t_appointment.miles_to.sum() +db.t_appointment.miles_from.sum() groupyyyymm = db.t_appointment.f_start_time.year()| db.t_appointment.f_start_time.month() rows = db().select( mysum, db.t_appointment.f_start_time.year(), db.t_appointment.f_start_time.month(), groupby=groupyyyymm) return dict(rows=rows, sql = db._lastsql) IN VIEW: {{for row in rows:}} {{=row[mysum]}} {{pass}} I get NameError: name 'mysum' is not defined If I try: {{for row in rows:}} {{=row['mysum']}} {{pass}} I get: Traceback (most recent call last): File "D:\web2py-src\web2py\gluon\restricted.py", line 194, in restricted exec ccode in environment File "D:\web2py-src\web2py\applications\caltest\views\info/ mileage.html", line 105, in <module> File "D:\web2py-src\web2py\gluon\dal.py", line 4331, in __getitem__ return dict.__getitem__(self, key) KeyError: 'mysum' On Feb 27, 2:08 pm, Anthony <abasta...@gmail.com> wrote: > > That syntax works and I can use that to refer to the data, I could see > > that a row object had an '_extra' dict for the selected expressions > > but could not see that the data could be referred to be the name of > > the expression 'mysum' (its in there somewhere but not sure where!!) > > The book example does show that usage: > > >>> sum = db.log.severity.sum() > >>> print db().select(sum).first()[sum] > > Actually, when you do row[mysum], the __getitem__ method of the Row object > automatically does row[str(mysum)]. Since mysum is a DAL Expression object, > its __str__ method converts it to the SQL syntax for the particular > database adapter you are using, which in this case is > "(SUM(t_appointment.miles_to) > + SUM(t_appointment.miles_from))". The Row __getitem__ method first looks > for that key in its _extra dict and returns the value if found. So, when > you do: > > row[mysum] > > This is essentially what is happening behind the scenes: > > 1. row[str(mysum)] > 2. row['(SUM(t_appointment.miles_to) + SUM(t_appointment.miles_from))'] > 3. row['_extra']['(SUM(t_appointment.miles_to) + > SUM(t_appointment.miles_from))'] > > Anthony