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?

Foi útil?

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.:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top