python中sql脚本中未指定数量的变量

时间:2015-06-11 18:44:25

标签: python sql

我想通过类似于此的python运行对sql数据库的查询:

cursor.execute('SELECT * FROM mf WHERE col2 = ? or ?', (country))

但是,我想在代码的这一部分中包含一些未指定数量或选项,并且用户在单独的参数文件中指定国家/地区,即我不知道有多少?到因为它的变量而放入代码。是否可以在SQL代码中执行此操作?

1 个答案:

答案 0 :(得分:1)

首先,您的SQL代码无效。您需要col2 = ? or col2 = ?或(更好)col2 IN (?, ?, ?)

这样的参数化查询不可能使用未知数量的参数。另一方面,您必须使用参数化查询来确保安全。解决方案是基于知道参数列表中参数的数量,使用IN表单构造参数化查询:

params = get_params_from_file_or_somewhere_else() # wherever you have the params.

qmarks = ', '.join('?' for param in params) # string with the "right" number of "?"

sql = 'SELECT * FROM mf WHERE col2 IN ({});'.format(qmarks)

cursor.execute(sql, params)