Pandas read_sql_query使用多个AND语句

问题描述 投票:1回答:2

我想在python pandas中组装一个SQL查询。我尝试了不同的方法,但总是得到以下错误:Incorrect number of bindings supplied. The current statement uses 6, and there are 3 supplied.

我的代码如下。我究竟做错了什么?

conn = sqlite3.connect(my_db)
df = pd.read_sql_query(
    con = conn,
    sql = """SELECT * FROM {table}
        WHERE @var1 = (?)
        AND @var2 = (?)
        AND @var3 = (?)
        ;""".format(table=table),
    params= (value1, value2, value3),
    )
python sql pandas
2个回答
2
投票

sqlite@符号(如?)解释为a parameter placeholder(搜索“参数”)。如果@var1是列的名称,那么它必须通过用反引号包围它来进行转义:

df = pd.read_sql_query(
    con = conn,
    sql = """SELECT * FROM {table}
        WHERE `@var1` = (?)
        AND `@var2` = (?)
        AND `@var3` = (?)""".format(table=table),
    params= (value1, value2, value3), )

agree with @AdiC,但是rename your columns会更方便,因此他们不会使用具有特殊含义的字符。


4
投票

正如你所说,@var1@var2@var3都是专栏名称。

但是,SQL会将@符号解释为值的参数,稍后您将在代码中提供该值。

因此,由于三个(?)s和三个@vars,您的SQL代码需要6个值。但是你只提供3个值(对于(?)s),这意味着发生了所述错误。

我建议在不使用'@'的情况下命名您的列,以便减少出错的可能性。

有关进一步说明,请参阅this question

© www.soinside.com 2019 - 2024. All rights reserved.