python sql,"选择?从表在哪里?喜欢?",(选中,哪里,喜欢))

时间:2015-11-06 00:37:24

标签: python select sqlite

    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.

有办法做到这一点吗?我假设答案与标题类似。

1 个答案:

答案 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注入(不确定谁将是用户虽然你的情况下的程序。