我有一个包含3个输入字段的输入表单。用户可以选择填充1到3个输入字段。我正在根据他们的输入生成SQL炼金术查询。如果用户尚未填写字段,则它不应该是查询条件的一部分。
我想我可以编写带有7个分支的代码 - 每个可能的查询都有一个SQL炼金术查询(例如,如果用户填写了字段2和3但不填写1,那么查询看起来像这样......)。 / p>
但我认为有一种方法可以以编程方式生成SQL炼金术语句,以避免这种复杂的分支。有这样的方法吗?
答案 0 :(得分:0)
只需按需链接过滤器并避免完全分支:
q = session.query(Person) # .join(...).filter(...).order_by(...)
# optional filters
if form.filter_name:
q = q.filter(Person.name == form.filter_name)
if form.filter_minimum_age:
q = q.filter(Person.minimum_age >= form.minimum_age)
if form.tag_name:
q = q.join(Tag, Person.tags).filter(Tag.name.like('%' + form.tag_name + '%'))
# iterate over results (only now the DB will be queried)
for person in q.all():
# do whatever