如何在pandas sql查询中动态传递变量值

时间:2018-02-05 18:44:42

标签: python pandas

如何动态传递变量参数

order = 10100

status = 'Shipped'

df1 = pd.read_sql_query("SELECT  * from orders where orderNumber =""" +  
str(10100) + """ and status = """ + 'status' +"""  order by orderNumber """,cnx)

TypeError:必须是str,而不是int

虽然我转换为字符串有任何想法但仍然存在错误?

有没有其他方法可以传递参数?

1 个答案:

答案 0 :(得分:3)

通过params keyword argument提供参数来使用参数化sql。数据库适配器将为您完成正确的参数引用,并且代码不易受SQL injection攻击。 (请参阅Little Bobby Tables以获取不正确引用的故障类型的示例,非参数化的sql可以帮助您进入。)

order = 10100

status = 'Shipped'

sql = """SELECT  * from orders where orderNumber = ?
         and status = ? order by orderNumber"""
df1 = pd.read_sql_query(sql, cnx, params=[order, status])

?中的sqlparameter markers。它们被params中正确引用的值替换。请注意,正确的参数标记取决于您使用的数据库适配器。例如,MySQLdbpsycopg2使用%s,而sqlite3oursql使用?