os.caminho.participe e sqlite não jogar bem juntos
Pergunta
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))
Produz este...
sqlite3.ProgrammingError:Número incorreto de ligações fornecido.A instrução atual usa 1, e há 54 fornecido.
Eu estava realmente confusa quanto ao que o 54 fornecido ligações, até que eu percebi que o meu caminho variável é de 54 caracteres.Mas, porque é poderoso, interpretando-a como uma longa lista de caracteres em vez de uma seqüência de caracteres, e como faço para parar de fazer isso?
Solução
O segundo argumento para execute
é um sequência.
Você escreveu (path)
, mas essas são apenas regular entre parênteses, o que é equivalente a path
.Strings são sequências de caracteres, assim, Python é obedientemente, passando ao longo de todos os 54 caracteres na seqüência que você forneceu.
O que você quer é (path,)
, que é uma tupla de 1 elemento.
Tuplas são criados com vírgulas, não parênteses.
Se esta é confuso, você poderia usar apenas [path]
;uma lista é bem por aqui também.:)