如何动态传递变量参数
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
尽管我转换为字符串有任何想法,但遇到了以上错误?
有没有其他的方式来传递参数?
通过通过params关键字arguments提供参数来使用参数化sql 。数据库适配器将为您完成参数的正确引用,并且代码将较不容易受到SQL注入攻击。(有关不正确引用的非参数化sql可能引起您的麻烦的类型,请参阅Little Bobby Tables。)
params
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为参数标记。它们被替换为正确引用的值params。请注意,正确的参数标记取决于您使用的数据库适配器。例如,MySQLdb和psycopg2使用%s,而sqlite3和oursql使用?。
?
sql
MySQLdb
psycopg2
%s
sqlite3
oursql