SQLite SELECT语句中的可选参数

时间:2015-04-06 00:57:32

标签: python python-3.x sqlite

我正在使用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?

1 个答案:

答案 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)