os.path.join и sqlite не очень хорошо работают вместе

StackOverflow https://stackoverflow.com//questions/24048504

  •  21-12-2019
  •  | 
  •  

Вопрос

Питон 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 интерпретирует его как длинный список символов, а не как строку, и как мне остановить это?

Это было полезно?

Решение

Второй аргумент в пользу execute это последовательность.

Вы написали (path), но это обычные круглые скобки, что эквивалентно path.Строки представляют собой последовательности своих символов, поэтому Python послушно передает все 54 символа в предоставленной вами последовательности.

То, что вы хотите, это (path,), который представляет собой кортеж из 1 элемента.

Кортежи создаются с помощью запятых, нет круглые скобки.

Если это сбивает с толку, вы можете просто использовать [path];список здесь тоже подойдет.:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top