我正在创建一个 Web 服务,它应该为探索数据集提供很大的灵活性。现在,为了在 SQL 中执行此操作,我发现手动创建查询比使用参数更容易(如下面的“选择”)。这将使 where sql 查询的生成更加容易(参见下面 where 变量的元组),例如,根据: http: //docs.python.org/library/sqlite3.html;更不安全。
我的问题是,有没有办法让它成为一个安全的选择?换句话说,是否有一种安全的方式来执行“手动”构建的查询?
我在想的是,如果我确保正在运行的查询以“SELECT”开头,那么应该保护我免受会改变数据的查询的影响。这是一个好主意吗?有没有更好的方法?或者参数化查询是避免 SQL 注入的唯一方法?
select = ['a','b']
where = [('a','=',1),('b','=',2)]
def retrieve(self,table,select,where='',groupBy=''):
select = ','.join(select)
sql = 'SELECT '+select+' FROM '+table
self.cur.execute(sql)
return self.cur.fetchall()