Python 2.7(Windows)
for root, dirs, files in os.walk(self.DiskLocation, topdown=False):
for name in files:
path = os.path.join(root, name)
print path #check it's what we think it is
self.cur.execute("SELECT * from myTable WHERE Path = ?", (path))
产生这个......
sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了54。
我真的很困惑54提供的绑定是什么,直到我意识到我的路径变量是54个字符。但是为什么sqlite将它解释为一个很长的字符列表而不是字符串,我该如何阻止它呢?
答案 0 :(得分:2)
execute
的第二个参数是序列。
你写了(path)
,但这些只是正则括号,所以它等同于path
。字符串是其字符的序列,因此Python尽职尽责地传递您提供的序列中的所有54个字符。
你想要的是(path,)
,它是1个元素的元组。
使用逗号创建元组,不括号。
如果这令人困惑,您可以使用[path]
;这里的名单也很好。 :)