如何在pandas sql查询中动态传递变量值

问题描述 投票:0回答:3

如何动态传递可变参数

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

尽管我转换为字符串,但出现上述错误,有什么想法吗?

有没有其他方法来传递参数?

python pandas prepared-statement
3个回答
16
投票

通过

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
使用
?


3
投票
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])

0
投票
order = 10100
status = 'Shipped'

query1 = "SELECT * FROM orders WHERE orderNumber = " + str(order) + " AND status = " + status + " ORDER BY orderNumber"

df1 = pandasql.sqldf(query1, locals())
© www.soinside.com 2019 - 2024. All rights reserved.