如何动态传递可变参数
order = 10100
status = 'Shipped'
df1 = pd.read_sql_query("SELECT * from orders where orderNumber =""" +
str(10100) + """ and status = """ + 'status' +""" order by orderNumber """,cnx)
类型错误:必须是 str,而不是 int
尽管我转换为字符串,但出现上述错误,有什么想法吗?
有没有其他方法来传递参数?
params
关键字参数提供参数来使用参数化 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])
?
中的sql
是参数标记。它们被替换为 params
中正确引用的值。请注意,正确的参数标记取决于您使用的数据库适配器。例如,MySQLdb
和psycopg2
使用%s
,而sqlite3
和oursql
使用?
。
IN MYSQL ::
order = 10100
status = 'Shipped'
sql = """SELECT * from orders where orderNumber = %s
and status = %s order by orderNumber"""
df1 = pd.read_sql_query(sql, cnx, params=[order, status])
order = 10100
status = 'Shipped'
query1 = "SELECT * FROM orders WHERE orderNumber = " + str(order) + " AND status = " + status + " ORDER BY orderNumber"
df1 = pandasql.sqldf(query1, locals())