错误将变量传递给SQL查询Python
问题描述:
当尝试使用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()
答
为了避免SQL注入攻击的机会,你应该通过变量在params
关键字参数:
df = pdsql.read_sql("""SELECT *
FROM table
WHERE field LIKE %(var)s""", conn, params={'var':'string%',})
答
pd.read_sql("SELECT * FROM table WHERE field LIKE '{}'".format(var), conn)
这应该这样做。您试图将元组传递给函数而不是字符串/ unicode对象。
不要用不信任的输入做到这一点。这就是SQL注入发生的方式。而是使用参数替换:http://stackoverflow.com/a/24418294/3901060 – FamousJameous