将变量传递给SQL查询Python时出错

时间:2017-04-13 21:36:29

标签: python sql oracle pandas cx-oracle

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

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 个答案:

答案 0 :(得分:3)

为了避免SQL注入攻击的可能性,您应该在params关键字参数中传递变量:

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

答案 1 :(得分:1)

pd.read_sql("SELECT * FROM table WHERE field LIKE '{}'".format(var), conn)

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