我想执行以下查询,
select * from table where name LIKE %sachin%;
我以这种方式创建了sql查询,
sql = "select * from table where %s like '\%%s\%'"
它给了我以下错误,
ValueError: unsupported format character ''' (0x27) at index 42
我想'%'字符串前后的符号。 我怎么能得到这个?它还应该减轻SQL注入。
答案 0 :(得分:1)
您最好的选择是使用占位符并在SQL中生成LIKE的右侧值,如下所示。最大的困难是你也希望传递标识符,这意味着你可能需要做一些不同的事情:
sqltemplate = "select * from table where {} like '%%' || %s || '%%'"
在此我们填写我们的标识符。请注意,将值列入白名单非常重要。
allowed_columns = ['foo', 'bar', 'bar']
if colname in allowed_columns:
sql = sqltemplate.format(colname);
else:
raise ValueError('Bad column name!')
然后你可以使用%s的占位符来实现它。
conn.execute(sql, (searchval,));
注意:在psycopg2中,您对占位符使用%s
和%d
,并使用%%
表示文字百分比。