Fixed :). using smart_query:
db.smart_query([db.status],query).delete() where query is in string format. On Wednesday, 21 November 2012 15:23:44 UTC+5:30, Amit wrote: > > I have done slight changes in the code and its working for select() > statement but still facing problem in case of delete(): > > code: > > def test(): > > query = request.vars['keywords'] > > if query: > print query > row =str(db(query).select(db.status.ALL)) > if row: > print row > redirect(URL('status')) > > In this case query string is : *status.id = "12"* > So I am getting result properly, but problem is: > if I remove *db.status.ALL* from select() statement , it again gives the > same error : > *<type 'exceptions.SyntaxError'> Set: no tables selected* > > > Same applies for delete() statement, even for delete we can't specify the > database table name as a parameter like select(). > > > > On Wednesday, 21 November 2012 12:01:08 UTC+5:30, Amit wrote: >> >> I have added button "Delete" beside Clear button on SQLFORM.grid and when >> user selects query and click on it , I am passing the query to my >> controller function and using regular expression I just prepending "db." >> and changing "=" to "==" and passing the query to the db() function but it >> throws SyntaxError : Set: no tables selected. >> >> Please check below the code: >> >> def status(): >> >> grid = SQLFORM.grid(db.status) >> >> grid[0][1][1].components.append(TAG.a('Delete',_id="px-delete",\ >> _class >> ="btn",_onclick="window.location >> = '" \ >> + URL('default','test')+"?"+ "'+ >> $('#web2py_keywords').serialize();\ >> ")) >> >> return locals() >> >> >> def test(): >> >> query = request.vars['keywords'] >> >> if query: >> modfied_query = re.sub(r'(status)', r'db.\1', query) >> final_query = re.sub(r'(=)', r'=\1', modfied_query) >> >> row =db(final_query).select().first() >> if row: >> print row >> redirect(URL('status')) >> >> here, status is the grid view where I added the Delete button and after >> query selection If I click button , I am able to get the query like >> status.id = "12", I changed it using regex to db.status.id == "12" and >> passing the final string to db() function , please check test() function. >> >> I am getting error on the below statement: >> >> *row **=db(final_query).select().first()* >> >> where "final_query" value will be db.status.id == "12". >> >> But if I use the same query like this: >> >> *row =db(db.status.id == "12").select().first()* >> >> it works fine. >> >> So not sure what I am doing wrong on the passing string as query. >> >> --