2017-04-13 68 views
1

当尝试使用cx_Oracle将Python字符串变量传递给SQL查询时,将返回错误消息'执行sql失败...预期字符串,unicode或缓冲区对象'。在这个问题上的任何帮助非常感谢,谢谢!错误将变量传递给SQL查询Python

import pandas as pd 
import cx_Oracle as ora 

var = 'string' 

conn = ora.connect('connection_string') 
df = pd.read_sql(("SELECT * FROM table WHERE field LIKE '%s'", (var)), conn) 
df.head() 

回答

2

为了避免SQL注入攻击的机会,你应该通过变量在params关键字参数:

df = pdsql.read_sql("""SELECT * 
         FROM table 
         WHERE field LIKE %(var)s""", conn, params={'var':'string%',}) 
1
pd.read_sql("SELECT * FROM table WHERE field LIKE '{}'".format(var), conn) 

这应该这样做。您试图将元组传递给函数而不是字符串/ unicode对象。

+3

不要用不信任的输入做到这一点。这就是SQL注入发生的方式。而是使用参数替换:http://stackoverflow.com/a/24418294/3901060 – FamousJameous