我有一个有3个输入域的输入表单。用户可以选择填写1到3个输入字段。我正在根据他们的输入生成SQL炼金术查询。如果用户尚未填写字段,则该字段不应作为查询条件的一部分。
我想我可以用7个分支来编写代码--每个可能的查询都有一个SQL炼金术查询(例如,如果用户填写了字段2和3,但没有填写1,则查询如下所示...)。
但我认为有一种方法可以通过编程生成SQL炼金术语句来避免这种复杂的分支。有这样的方法吗?
发布于 2014-06-28 02:02:32
只需按需链接过滤器,并完全避免分支:
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 whateverhttps://stackoverflow.com/questions/24456104
复制相似问题