Hi All, In the past few days i have been struggling with the problem of generating a dynamic query.
My goal is to create a reusable model, which gives the possibility to search all fields in a given table for the presence of a string. The result will be a list of id's with the records in which the searched string is present in any field. My problem always comes down to the simple point that, although i am able to build a query by examining the table, in the end my constructed query is a string. Whenever i try to execute i get an error, as far as i understand caused by the feeding of a string to the db(). Can anybody give me a hint in the right direction? Thanks in advance, Jaap My sample (*not working*) code: class SmartSearch(object): def __init__(self,table): _start_query = '' _fields = [] _select = '' _start_query += '(db.' + str(table) + '.id>0)&' _select += 'db.' + str(table) + '.id,' for item in table: _fields.append(str(item)) if type(item.requires).__name__ == 'IS_IN_DB': _start_query += '(' + 'db.' + str(item) + '==db.' + str(item .requires.ktable) + '.id' + ')&' self._start_query = _start_query[:-1] self._select = _select self._fields = _fields return def search(self, search_string, search_mode='AND'): items = search_string.split() _query = '' for item in items: _sub_query = '' for field in self._fields: _sub_query += '(db.' + field + '.like("%' + item + '%"))|' _sub_query = _sub_query[:-1] _sub_query = '(' + _sub_query + ')' if search_mode == 'AND': _query += _sub_query + '&' else: _query += _sub_query + '|' _query = _query[:-1] totaal_query = self._start_query + '(' + _query + ')' result = db(totaal_query).select(self._select) return --