SQLALchemy dynamic filter_by

前端 未结 2 465
温柔的废话
温柔的废话 2020-12-09 11:51

I know you can build dynamic filters for queries for SQLAlchemy by supplying **kwargs to filter_by.

For example

    filt         


        
2条回答
  •  悲&欢浪女
    2020-12-09 12:31

    def get_filter_by_args(dic_args: dict):
        filters = []
        for key, value in dic_args.items():  # type: str, any
            if key.endswith('___min'):
                key = key[:-6]
                filters.append(getattr(model_class, key) > value)
            elif key.endswith('___max'):
                key = key[:-6]
                filters.append(getattr(model_class, key) < value)
            elif key.endswith('__min'):
                key = key[:-5]
                filters.append(getattr(model_class, key) >= value)
            elif key.endswith('__max'):
                key = key[:-5]
                filters.append(getattr(model_class, key) <= value)
            else:
                filters.append(getattr(model_class, key) == value)
        return filters
    
    dic_args = {
        'is_created': 1,
        'create_time__min': 1588125484029,
    }
    filters = get_filter_by_args(dic_args)
    lst = session.query(model_class).filter(*filters)
    

提交回复
热议问题