Cómo pasar parámetros variables dinámicamente
order = 10100 status = 'Shipped' df1 = pd.read_sql_query("SELECT * from orders where orderNumber =""" + str(10100) + """ and status = """ + 'status' +""" order by orderNumber """,cnx)
TypeError: debe ser str, no int
obtener error por encima aunque he convertido a cadenas alguna idea?
¿Hay alguna alternativa para pasar los parámetros?
Utilice sql parametrizado proporcionando los argumentos a través del argumento de palabra clave params
. El adaptador de la base de datos hará la cita correcta de los argumentos y el código será menos vulnerable a los ataques de inyección de SQL . (Consulte Little Bobby Tables para ver un ejemplo del tipo de problema que se cita incorrectamente, el SQL no parametrizado puede ayudarlo).
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])
El ?
s en sql
son marcadores de parámetros . Se reemplazan con los valores citados correctamente de los params
. Tenga en cuenta que el marcador de parámetro adecuado depende del adaptador de base de datos que esté utilizando. Por ejemplo, MySQLdb
y psycopg2
usan %s
, mientras que sqlite3
, y oursql
usa ?
.