我正在使用Python 3中的sqlite3
模块来使用SQLite。
我有一个SELECT语句,可以根据用户输入使用不同数量的参数执行。例如,如果用户没有提供参数,那么语句就是:
SELECT * FROM TestTable WHERE User=?
默认情况下,每个用户的ID都是已知的。
另一方面,如果用户提供了一个或多个参数来优化选择,那么语句可以变成如下:
SELECT * FROM TestTable WHERE User=? AND ColA=? AND ColB=?
为了处理这种不同的用户输入,SQLite中有一种原生方式来支持SELECT语句中的可选参数吗?或者我只需要首先使用基于用户输入的Python以编程方式生成相应的SQL字符串,然后使用派生字符串来执行SQL?
答案 0 :(得分:2)
可以将未使用的参数设置为NULL,并在查询中检查:
sql = "SELECT ... WHERE User=?1 AND (?2 IS NULL OR ColA=?2) ..."
cursor.execute(sql, [user, a_or_null])
但是,这会使查询既复杂又执行缓慢。
动态构造查询字符串会更容易:
sql = "SELECT ... WHERE User=?"
params = [user]
if a_is_specified:
sql += " AND ColA=?"
params += [a]
...
cursor.execute(sql, params)