参数化sql查询与安全性

2024-03-29 08:58:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个web服务,它应该在探索数据集时提供很大的灵活性。现在,为了在SQL中实现这一点,我发现手动创建查询比使用参数更容易(如下使用“select”)。这将使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()

Tags: 数据方法selfwebsql参数table手动