5

如何动态传递可变参数

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

尽管我转换为字符串,但得到上述错误任何想法?

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

4

1 回答 1

13

通过params关键字 argument提供参数来使用参数化 sql 。数据库适配器将为您完成正确的参数引用,并且代码将不易受到SQL 注入攻击。(请参阅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])

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

于 2018-02-05T18:49:41.077 回答