Python 如何使用pandas read\u sql\u查询函数将columname作为参数传递

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 "

我正在编写一个sql查询,希望通过pandas.read\u sql\u查询中的参数传递where条件。 它对值很有效,但是我遇到了变量的问题。 我的解决方法是将一个concated字符串传递给pandas,但我不希望看到我的代码如此。 我已经发现,表的列名写错了。例如,它是“colname”而不是colname

我将sql编写为字符串:


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}
中像这样封装它。这就是解决方案。谢谢你,朱莉娅