def findByFieldsValues(cls,fields,values,session=None,onlyOne=True,notNoneFields=None,orderByFields=None,ascending=True,operators=None,groupByFields=None,selectFieldsAndFunctions=None,nestedOperators=None,returnDataframe=False,distinct=False,printQuery=False): if operators is None: operators = [SQLOperator.equalOperator] * 1000 close = False if session is None: session = cls.database.Session() close = True o = None if selectFieldsAndFunctions is None: o = session.query(cls) else: o = Query(selectFieldsAndFunctions, session=session) for field,value,operator in zip(fields,values,operators): operator.field = field operator.value = value o = operator.filter(o) if nestedOperators is not None: for operator in nestedOperators: o = operator.filter(o) if notNoneFields is not None: for f in notNoneFields: o = o.filter(f != None) if groupByFields is not None: for f in groupByFields: o = o.group_by(f) if orderByFields is not None: for f in orderByFields: if ascending: o = o.order_by(f) else: o = o.order_by(f.desc()) if printQuery: print(o) if onlyOne: o = o.first() else: if distinct: o = o.distinct() if returnDataframe: o = cls.queryToDataframe(o) else: o = o.all() if close: session.close() return o