os.path.join과 sqlite가 함께 잘 작동하지 않음
문제
파이썬 2.7(윈도우)
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.프로그래밍 오류:잘못된 수의 바인딩이 제공되었습니다.현재 명령문에서는 1을 사용하며 54개가 제공됩니다.
내 경로 변수가 54자라는 것을 깨닫기 전까지는 제공된 54개의 바인딩이 무엇인지 정말 혼란스러웠습니다.그런데 sqlite가 이를 문자열이 아닌 긴 문자 목록으로 해석하는 이유는 무엇이며, 이를 중지하려면 어떻게 해야 합니까?
해결책
두 번째 주장 execute
는 순서.
당신은 썼다 (path)
, 그러나 이는 단지 일반 괄호이므로 다음과 동일합니다. path
.문자열은 문자의 시퀀스이므로 Python은 사용자가 제공한 시퀀스의 54개 문자를 모두 성실하게 전달합니다.
당신이 원하는 것은 (path,)
, 이는 1개 요소로 구성된 튜플입니다.
튜플은 쉼표로 생성됩니다. ~ 아니다 괄호.
이것이 혼란스럽다면 그냥 사용해도 됩니다. [path]
;여기 목록도 괜찮습니다.:)
제휴하지 않습니다 StackOverflow