有没有一种方法可以动态构建sql查询



我正在使用SQLite3和tkinter用Python编写数据库管理器,并试图构建一个查询函数。我的数据库中的每个元素都有几个属性:"名称"、"路径"、"可见"、"质量"、"特许经营"、"流派"one_answers"标签"。

如果可能的话,我希望用户能够在GUI中选择某些选项,然后创建对数据库的请求,但问题是用户应该能够选择要过滤掉或进入查询的任何或所有属性。例如,一个查询可能要求数据库中名称为"的所有对象;Tony";,特许经营权;"玩具总动员";,和流派";动作";,而另一个查询可能只希望看到"可见"的所有对象;是的";。

我在这方面遇到了很多麻烦,尽管我很想这样做,但我无法对SQL Select语句的每个部分的排列进行硬编码,而且我觉得还有一种更好的方法,无论如何我都看不到。我已尝试设置"默认语句":SELECT * FROM objects WHERE,然后像genre IS ?一样添加到它上,如果特许经营权比AND franchise IS ?重要,但后来我遇到了一个问题,我不知道如何动态格式化替换。我确信这是可以做到的,所以我很乐意得到任何帮助。谢谢

你绝对走在了正确的道路上。考虑建立一个WHERE子句列表和一个平行的替换列表。在这个例子中,我使用的是字符串,但你会想到:

subs = []
where = []
where.append( "name = ?" )
subs.append( "Tony" )
where.append( "franchise = ?" )
subs.append( "Toy Story" )
sql = "SELECT * FROM movies WHERE " + (" AND ".join(where)) + ";"
query = cursor.execute( sql, subs )

最新更新