2015-04-06 104 views
0

我在Python 3中使用sqlite3模块来使用SQLite。SQLite SELECT语句中的可选参数

我有一个SELECT语句,可以根据用户输入使用不同数量的参数执行。例如,如果没有参数由用户提供,则该语句是简单地:

SELECT * FROM TestTable WHERE User=?

,其中每个用户的ID是由缺省已知的。

在另一方面,如果一个或多个参数是由用户提供完善的选择,那么语句可以成为这样的:

​​

为了应对这种变化的用户输入的,是在SQLite中有一种本地方式来支持SELECT语句中的可选参数?或者我只需要以编程方式首先使用基于用户输入的Python生成适当的SQL字符串,然后使用派生字符串执行SQL?

+0

是的,你必须创建'SQL string' – itzMEonTV 2015-04-06 01:03:09

+0

http://www.sqlalchemy.org/ – davidism 2015-04-06 01:16:35

回答

1

这将有可能设置不使用的参数为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)