os.path.join и sqlite не очень хорошо работают вместе
Вопрос
Питон 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]
;список здесь тоже подойдет.:)