I tried this (2.0.2) and I cannot reproduce the problem: db = DAL(lazy_tables=True)
db.define_table('reviews_like', Field('review_id', 'reference reviews'), Field('helpful', 'boolean')) db.define_table('reviews', Field('title')) db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id == ro\ w.reviews.id) & (db.reviews_like.helpful == True)).count() ) db.reviews.neg = Field.Lazy(lambda row: db((db.reviews_like.review_id == ro\ w.reviews.id) & (db.reviews_like.helpful == False)).count() ) id = db.reviews.insert(title='xxx') db.reviews_like.insert(review_id=id, helpful=True) print db(db.reviews_like.review_id==db.reviews.id).select() On Thursday, 30 August 2012 11:16:27 UTC-5, Paolo wrote: > > Dear all, > I just updated web2py and after turning on the lazy_table I got: > > Traceback (most recent call last): > File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 209, in > restricted > exec ccode in environment > File > "/home/paolo/Dropbox/git/web2py/applications/bikend/views/load/reviewsFilter.html", > line 57, in <module> > var str = '{{=T('Route ')}}<small>NAME </small><b class="caret"> > </b>'.replace(/NAME/gi, $(this).text()); > File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 8810, in __call__ > return self.method(self.row,*args,**kwargs) > File "/home/paolo/Dropbox/git/web2py/applications/bikend/models/db.py" > <http://127.0.0.1:8000/admin/default/edit/bikend/models/db.py>, line 427, in > <lambda> > db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id == > row.reviews.id) & (db.reviews_like.helpful == True)).count() ) > File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 8675, in count > return db._adapter.count(self.query,distinct) > File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1542, in count > self.execute(self._count(query, distinct)) > File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1598, in execute > return self.log_execute(*a, **b) > File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1592, in > log_execute > ret = self.cursor.execute(*a, **b) > ProgrammingError: Cannot operate on a closed database. > > > The table involved in the error is defined as follows: > > db.define_table('reviews_like', > Field('review_id', 'reference reviews'), > Field('helpful', 'boolean', > widget = BuildRadioButtonWidget), > Field('created_on', 'datetime', default=request.now, > writable = False, readable = False), > Field('user_id', db.auth_user, default=auth.user_id, > writable = False, readable = False) > ) > > db.define_table('reviews', > Field('route_id', 'reference route', default=db.route.id), > Field('rating', 'integer',requires=IS_IN_SET(range(1,6))), > Field('title', 'string', > requires=(IS_NOT_EMPTY(error_message=T('Enter a > title')),IS_LENGTH(250,error_message=T('Warning, title too long')), > IS_LENGTH(minsize=3, error_message=T('Warning, title too short')))), > Field('description', 'text', > requires=(IS_NOT_EMPTY(error_message=T('Please, enter a > description')),IS_LENGTH(250,error_message=T('Warning, description too > long')), IS_LENGTH(minsize=75, error_message=T('Warning, the description is > too short, reviews must be at least 75 characters long.')))), > auth.signature, > > ) > db.reviews.route_id.readable = False > db.reviews.route_id.writable = False > db.reviews.rating.widget = starWidget > db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id == > row.reviews.id) & (db.reviews_like.helpful == True)).count() ) > db.reviews.neg = Field.Lazy(lambda row: db((db.reviews_like.review_id == > row.reviews.id) & (db.reviews_like.helpful == False)).count() ) > > what is wrong ? > > Cheers > Paolo > > > > --