문제

파이썬 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];여기 목록도 괜찮습니다.:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top