def build_condition(filter_type: str, column: Column, value): if filter_type == "like": if not isinstance(value, list): value = [value] response = [column.like(f"%{single_value}%") for single_value in value] else: if not isinstance(value, list): value = [value] response = [column.in_(value)] return response
def _apply_text_filter(query: Select, args: dict, column: Column) -> Select: """ If a value has been specified by the ['search']['value'] parameter from a DataTable AJAX request, this adds "column LIKE %['search']['value']%" to the WHERE clause of the given query. :param query: the DataTable SQL query :param args: the query parameters from a DataTable AJAX request :param column: the column to be filtered :return: the query with the filter (if it exists) applied """ search_value = args['search']['value'] if search_value: query = query.where( column.like('%{}%'.format(search_value)) ) return query
def get_bool_operation(model_property: Column, operator: str, value: Any) -> Union[bool, ClauseElement]: if operator == "_eq": return model_property == value if operator == "_in": return model_property.in_(value) if operator == "_is_null": return model_property.is_(None) if operator == "_like": return model_property.like(value) if operator == "_neq": return model_property != value if operator == "_nin": return model_property.notin_(value) if operator == "_nlike": return model_property.notlike(value) if operator == "_lt": return model_property < value if operator == "_gt": return model_property > value if operator == "_lte": return model_property <= value if operator == "_gte": return model_property >= value raise Exception("Invalid operator")
from ordereddict import OrderedDict #数据库已创建表,select * from pg_statio_user_tables SessionMaker = sessionmaker() _sql_rl = _sql_relate = {'and': and_, 'or': or_} _exp_where_op = { '=': Column.__eq__, '>': Column.__gt__, '<': Column.__lt__, '>=': Column.__ge__, '!=': Column.__ne__, '<>': Column.__ne__, 'like': Column.like, 'not like': lambda *fvs: not_(Column.like(*fvs)), 'in': Column.in_, 'is': Column.__eq__, 'is not': Column.__ne__, '<=': Column.__le__, 'not is': Column.__ne__ } _orm_where_op = { '=': iattr.__eq__, '>': iattr.__gt__, '<': iattr.__lt__, '>=': iattr.__ge__, '!=': iattr.__ne__, '<>': iattr.__ne__, 'like': iattr.like,
from decimal import Decimal from .record import Record,RecordSet,QueryValue from datetime import datetime try: from collections import OrderedDict except: from ordereddict import OrderedDict #数据库已创建表,select * from pg_statio_user_tables SessionMaker=sessionmaker() _sql_rl=_sql_relate={'and':and_,'or':or_} _exp_where_op={'=':Column.__eq__,'>':Column.__gt__,'<':Column.__lt__,'>=':Column.__ge__,'!=':Column.__ne__,'<>':Column.__ne__,'like':Column.like,'not like':lambda *fvs:not_(Column.like(*fvs)),'in':Column.in_,'is':Column.__eq__,'is not':Column.__ne__,'<=':Column.__le__,'not is':Column.__ne__} _orm_where_op={'=':iattr.__eq__,'>':iattr.__gt__,'<':iattr.__lt__,'>=':iattr.__ge__,'!=':iattr.__ne__,'<>':iattr.__ne__,'like':iattr.like,'not like':lambda *fvs:not_(iattr.like(*fvs)),'in':iattr.in_,'is':iattr.__eq__,'is not':iattr.__ne__,'not is':iattr.__ne__,'<=':iattr.__le__} ENGINE_STRING='%(dialect)s+%(driver)s://%(user)s:%(password)s@%(host)s/%(dbname)s?%(paras)s' _n1='eq,ne,gt,ge,lt,le,nu,nn,in,ni'.split(',') _o1='=,<>,>,>=,<,<=,is null,not is null,is not null,in,not in'.split(',') _n2='bw,bn,ew,en,cn,nc'.split(',') _o2='like,not like,like,not like,like,not like'.split(',') _v2='%s%%,%s%%,%%%s,%%%s,%%%s%%,%%%s%%'.split(',') _op1=dict(zip(_n1,_o1)) _op2=dict(zip(_n2,zip(_o2,_v2))) def sql_filter(field_filter):