我如何从 sqlalchemy 过滤器语句中的列表传递多个参数

问题描述

用户返回一个字符串,其中解析以在 sqlalchemy 中应用过滤器。 但参数数量未知。 例如:

def fun_name(user_id,value):
  return db.query(table)
         .filter(or_(table.column_name.like('%'+value+'%')))

如果值是一个字符串,我可以使用该值应用过滤器,这将起作用。

但现在我遇到了这种情况:

def fun_name(user_id,values):
  values_lst = values.split(',')
  return db.query(table)
         .filter(or_(table.column_name.like('%'+ values_lst[0] +'%'),table.column_name.like('%'+ values_lst[1] +'%')))

这仅在拆分有两个参数时才有效, 但是,如果我之前不确切知道列表的大小,我该如何处理?

有没有通用的方法来解析这个?

解决方法

感谢我的朋友,他的答案挽救了我的一天。 解决办法是

def fun_name(user_id,values):
  values_lst = values.split(',')
  return db.query(table)
         .filter(or_(*[table.column_name.like(f'%{val}%') for val in values_lst]))