我想知道我是否可以使用Flask SQLalchemy创建一个查询,它将为我提供来自一个表的所有行,该表具有两个属性Id和名称,但像这样:如果我不定义属性它会返回表的所有行,如果我定义Id它会返回带有Id的行,如果我定义名称它会返回带有名称的行如果我定义两者它会返回带有属性的行
它应该看起来像这样:
Table.query.filter ( _or(Table.id==id, Table.name==name ).all()
要准确地执行您想要的操作,特别是在过滤器字段为None
时获取所有内容,一种解决方案可能是为此创建一个函数:
def search(Table, **kwargs):
if not kwargs:
return db.query(Table).all()
filters = {k: v for k, v in kwargs.items() if v is not None}
return db.query(Table).filter_by(**filters).all()
假设db
是SqlAlchemy会话对象
那么你可以这样使用:
search(YourModel) # fetch everything
search(YourModel, name=None) # fetch everything
search(YourModel, name='Hello') # fetch all YourModel with name='Hello'
search(YourModel, name='Hello', id=123) # fetch all YourModel with name='Hello' and id=123