我正在尝试在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),
)
答案 0 :(得分:4)
正如您所说,@var1
,@var2
和@var3
都是列名。
但是,SQL会将@
符号解释为您稍后将在代码中提供的值的参数。
因此,由于三个(?)
和三个@var
,您的SQL代码需要6个值。但是你只提供3个值(对于(?)
s),这意味着正在发生错误。
我建议您在不使用'@'
的情况下为列命名,以便减少出错的可能性。
有关进一步说明,请参阅this question。
答案 1 :(得分: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会更方便,因此他们不会使用具有特殊含义的字符。