如何动态传递变量参数
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
虽然我转换为字符串有任何想法但仍然存在错误?
有没有其他方法可以传递参数?
答案 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])
?
中的sql
是parameter markers。它们被params
中正确引用的值替换。请注意,正确的参数标记取决于您使用的数据库适配器。例如,MySQLdb
和psycopg2
使用%s
,而sqlite3
和oursql
使用?
。