select=input("select: ")
for row in data.execute('select ? from stocks where date like "2015-11-05" ',(select)):
print(row)
这就是我现在所做的一切,但我收到此错误并且无法找到解决方案
sqlite3.ProgrammingError: Incorrect number of bindings supplied.
The current statement uses 1, and there are 5 supplied.
有办法做到这一点吗?我假设答案与标题类似。
答案 0 :(得分:0)
(select)
不是元组,而是一个字符串,在你的情况下是一个5个字符的字符串。由于字符串也是可迭代的,sqlite
会将字符串拆分为字符,并尝试使用字符串中的所有5个字符来参数化查询。相反,你的意思是有一个元组内部有一个元素:
data.execute('select ? from stocks where date like "2015-11-05" ', (select, ))
但是,问题是 - 这不会起作用,你cannot parameterize the table or column names并且你被迫使用字符串格式化:
data.execute('select {} from stocks where date like "2015-11-05"'.format(select))
请注意,由于我们在这里使用字符串格式,因此我们使代码容易受到SQL注入攻击 - 您应该明确验证select
变量值并保护自己免受SQL注入(不确定谁将是用户虽然你的情况下的程序。