Python 如何使用pandas read\u sql\u查询函数将columname作为参数传递
我正在编写一个sql查询,希望通过pandas.read\u sql\u查询中的参数传递where条件。 它对值很有效,但是我遇到了变量的问题。 我的解决方法是将一个concated字符串传递给pandas,但我不希望看到我的代码如此。 我已经发现,表的列名写错了。例如,它是“colname”而不是colname 我将sql编写为字符串:Python 如何使用pandas read\u sql\u查询函数将columname作为参数传递,python,pandas,mariadb,Python,Pandas,Mariadb,我正在编写一个sql查询,希望通过pandas.read\u sql\u查询中的参数传递where条件。 它对值很有效,但是我遇到了变量的问题。 我的解决方法是将一个concated字符串传递给pandas,但我不希望看到我的代码如此。 我已经发现,表的列名写错了。例如,它是“colname”而不是colname 我将sql编写为字符串: command=("SELECT * FROM review r " "WHERE 1=1 "
command=("SELECT * FROM review r "
"WHERE 1=1 "
"AND "+selected_var+"= "+selected_val
)
然后我把它传给熊猫
self.reviews = pd.read_sql_query(command, con = self.cnxn)
但我想把它包括在内,而不采取变通办法
import pandas as pd
import mysql.connector
self.reviews = pd.read_sql_query("""
SELECT *
FROM review r
WHERE 1=1
AND %(sel_var)s = %(sel_val)s;
""", con = self.cnxn, params = {'sel_var': selected_var,
'sel_val': selected_val
})
我希望查询显示结果时不会将所有内容都写入命令字符串。字符串格式如何
input_params = {'sel_var': selected_var,
'sel_val': selected_val}
self.reviews = pd.read_sql_query(""" SELECT * FROM review r WHERE 1=1
AND {sel_var}={sel_val};""".format(**input_params),
con = self.cnxn)
字符串格式呢
input_params = {'sel_var': selected_var,
'sel_val': selected_val}
self.reviews = pd.read_sql_query(""" SELECT * FROM review r WHERE 1=1
AND {sel_var}={sel_val};""".format(**input_params),
con = self.cnxn)
那么问题出在哪里呢?我不想使用命令解决方法来设置额外的字符串。但是我不能通过pd.read\u sql\u查询(params)给出列的名称。如果我这样做,我不会收到任何结果行。那么问题是什么?我不想使用命令解决方法来设置额外的字符串。但是我不能通过pd.read\u sql\u查询(params)给出列的名称。如果我这样做,我就不会收到任何结果行。通过使用剪断的结果,问题就迎刃而解了。现在var信息(列)被val正确处理,val信息也被列处理。“\”不见了。如果混合应用.format和pd.read_sql_查询(params),我无法在WHERE条件下选择字符。它可以工作,但不是最佳的。如果您的
selected_val
是一个字符,您需要在查询和{sel_var}='{sel_val}
中像这样封装它。这就是解决方案。谢谢你@JuliaBy用这个剪断了问题是相反的。现在var信息(列)被val正确处理,val信息也被列处理。“\”不见了。如果混合应用.format和pd.read_sql_查询(params),我无法在WHERE条件下选择字符。它可以工作,但不是最佳的。如果您的selected_val
是一个字符,您需要在查询和{sel_var}='{sel_val}
中像这样封装它。这就是解决方案。谢谢你,朱莉娅