我正在使用sqlite3
Python 3中的模块与SQLite一起使用。
我有一个SELECT语句,该语句可以根据用户输入使用不同数量的参数执行。例如,如果用户未提供任何参数,则该语句很简单:
SELECT * FROM TestTable WHERE User=?
默认情况下,每个用户的ID都是已知的。
另一方面,如果用户提供了一个或多个参数来优化选择,则该语句可能变为类似以下内容:
SELECT * FROM TestTable WHERE User=? AND ColA=? AND ColB=?
为了处理这种各种各样的用户输入,SQLite中是否存在一种本机方式来支持SELECT语句中的可选参数?或者我只需要首先基于用户输入使用Python以编程方式生成适当的SQL字符串,然后使用派生的字符串执行SQL?
可以将未使用的参数设置为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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句