You are passing to select a list of field names and not a list fo fields. Try
db().select(*[f for f in db['test_activity'] if not f.name in fieldsBlackList]) On Oct 21, 9:32 am, Richard Vézina <[email protected]> wrote: > In [4]: *[f for f in db['test_activity'].fields if f not in > fieldsBlackList]------------------------------------------------------------ > File "<ipython console>", line 1 > *[f for f in db['test_activity'].fields if f not in fieldsBlackList] > ^ > SyntaxError: invalid syntax > > In [5]: (*[f for f in db['test_activity'].fields if f not in > fieldsBlackList]) > ------------------------------------------------------------ > File "<ipython console>", line 1 > (*[f for f in db['test_activity'].fields if f not in fieldsBlackList]) > ^ > SyntaxError: invalid syntax > > And it raise : > > In [6]: db().select(*[f for f in db['test_activity'].fields if f not in > fieldsBlackList]) > ------------------------------------------------------------ > SyntaxError: Set: no tables selected > > In the select expression... > > Richard > > On Thu, Oct 21, 2010 at 10:27 AM, Richard Vézina < > > > > > > [email protected]> wrote: > > Do I have to import a python module... In Ipython I was having synthax > > error with *[list comp exp of yesterday] > > > Richard > > > On Wed, Oct 20, 2010 at 10:31 PM, DenesL <[email protected]> wrote: > > >> It really depends on how you select and which row indexing you want. > > >> To use db().select(...) > >> you have to specify table.field pairs in the select (without the db > >> part) > >> and to obtain the value of field1 you use row['table.field1']. > > >> If you are selecting fields from only one table the alternative would > >> be > >> db(db.table.id>0).select(*[list of fields without table prefix]) > >> and each value is accessible as row['field']. > > >> To use db().select(...) as in your first post > >> you would build the comprehension with: > >> L=[ 'table2.%s'%f for f in db['table1'].fields if f not in blacklist ] > > >> which creates a list L with: > >> 'table2.field1', 'table2.field2', ... > >> where field1, field2, ... are field names from table1 that are not > >> black listed, > > >> and that list can be used directly in the select: > >> rows=db().select(*L) # note the * before the list > > >> Hope this helps, > >> Denes > > >> On Oct 20, 11:16 am, Richard Vézina <[email protected]> > >> wrote: > >> > Near of it... Your list comprehension is doing much simpler then I were > >> > doing what it should do. > > >> > But the problem is still there... > > >> > First the > > >> > [f for f in db['table1'].fields if f not in BlackList] > > >> > Return a list (['field1','field2', etc.]) without the rest of the > >> > information needed : "db.table" > > >> > I was having in a : > > >> > 'db.table.field1, db.table.field2, etc.' > > >> > Second it is a list. > > >> > My fundamental problem is that I try tu use the content of a variable as > >> > code for my app and that should not be a common thing in programmation > >> since > >> > I am not a experienced programmer. > > >> > I don't know if I should do something else to resolve my problem... > > >> > Basically I would do exactly the inverse of columns= do in SQLTABLE > > >> > Richard > > >> > On Tue, Oct 19, 2010 at 10:52 PM, DenesL <[email protected]> wrote: > >> > > Hello Richard, > > >> > > if I understood correctly, you want: > > >> > > ... > >> > > BlackList = [ 'fieldx', 'fieldy', ...] > >> > > rows = db().select(*[f for f in db['table1'].fields if f not in > >> > > BlackList]) > >> > > ... > > >> > > Denes > > >> > > On Oct 19, 6:14 pm, Richard Vézina <[email protected]> > >> > > wrote: > >> > > > Hello, > > >> > > > I would do this : > > >> > > > def grid(): > >> > > > if request.args[0] in tableSubSet: > >> > > > allFieldsSet=set(db['table1'].fields) # all the fields in > >> the > >> > > table > >> > > > fieldsBlackListSet=set(['f1ToRem','f2ToRem','f1ToRem']) # > >> fields > >> > > to > >> > > > be remove from the grid > >> > > > allFieldsSet-=fieldsBlackListSet # removing fields to be > >> removed > >> > > > fieldsRequested=[] > >> > > > for field in allFieldsSet: > >> > > > fieldsRequestedList.append('db.test_activity.'+field) # > >> > > building > >> > > > the select list of elements > > >> > > > a=','.join(fieldsRequestedList) # transform the list into a > >> > > string > > >> > > > rows = db().select(a) # BLOCKED BECAUSE OF THE QUOTES > >> > > > (*'*db.table1.field1, > >> > > > db.table1.field2, etc.*'*)!!! > >> > > > table=SQLTABLE(rows) > >> > > > return dict(table=table) > > >> > > > Thanks for your help. > > >> > > > Richard > >

