I have upgraded from 2.14.6 to 2.15.4 (in PythonAnywhere using Python 2.7 and MySQL) and I now get AttributeError*: *'Expression' object has no attribute 'tablename' whenever I use COUNT or SUM in a query for SQLTABLE.
It looks as though the intermediate variable names for the SUM and COUNT fields are not being found. SQLTABLE works fine for standard database fields. A workaround seems to be to use grid=rows.as_list() rather than grid=SQLTABLE(rows,headers=hdrs) and then build the table manually in the view rather than just using {{=grid}} but this is extra work and I use SQLTABLE quite a lot. Traceback *(*most recent call last*):* File "/home/appgov/web2py/gluon/restricted.py"*, *line 219*, in * restricted *exec(*ccode*, *environment*)* File "/home/appgov/web2py/applications/apg/controllers/cg.py" <https://www.appgov.org/admin/default/edit/apg/controllers/cg.py>*, *line 836*, in <*module*>* File "/home/appgov/web2py/gluon/globals.py"*, *line 414*, in <lambda>* * self.*_caller *= lambda *f*: *f*()* File "/home/appgov/web2py/applications/apg/controllers/cg.py" <https://www.appgov.org/admin/default/edit/apg/controllers/cg.py>*, *line 657*, in *cgsusearch grid *= *SQLTABLE*(*rows*, *headers*=*hdrs*, *truncate*=*50*)* File "/home/appgov/web2py/gluon/sqlhtml.py"*, *line 3330*, in *__init__ tablemap *= *dict*(((*f*.*tablename*, *f*.*table*) for *f *in *fieldmap *.*values*()))* File "/home/appgov/web2py/gluon/sqlhtml.py"*, *line 3330*, in <*genexpr*>* tablemap *= *dict*(((*f*.*tablename*, *f*.*table*) for *f *in *fieldmap *.*values*()))* AttributeError*: *'Expression' object has no attribute 'tablename' Code: query = db.dpspend.supplier.like(xsearch, case_sensitive=False) isum = db.dpspend.amount.sum() icount = db.dpspend.amount.count() # group by family then supplier .... rows = db(query).select(db.dpspend.dpfamily, db.dpspend.supplier, isum, icount, orderby=db.dpspend.dpfamily, groupby=db.dpspend.dpfamily|db.dpspend.supplier) # Calculate the overall total values .... for row in rows: session.cgtotamt = session.cgtotamt + row._extra[isum] session.cgtotrecs = session.cgtotrecs + row._extra[icount] session.cgtotsus += 1 db.dpspend.amount.represent = lambda value, row: DIV('{0:,}'.format(0.0 if value == None else value), _style='text-align: right;') hdrs = {'dpspend.dpfamily':T('Department'), 'dpspend.supplier':T('Supplier name'), 'SUM(dpspend.amount)':T('Total amount'), 'COUNT(dpspend.amount)':T('Records')} grid = SQLTABLE(rows, headers=hdrs, truncate=50) return dict(grid=grid) -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.