하얀설표 블로그




해결)sqlite3.OperationalError: table data has no column named *





( 수정됨)


에러

OperationalError: table A has no column named *

해결방법

  1. 잘못된 칼럼명을 사용한 것은 아닌지 확인한다.
  2. 칼럼명 형식을 확인한다.

설명

에러 메세지만 보자면 존재하지 않는 칼럼명을 사용했기 때문에 발생하는 에러다.

그러나, 칼럼을 생성할 때 잘못된 이름 형식을 사용한 것이 문제일 수 있다.

잘못된 이름 형식?

sqlite의 테이블 또는 칼럼 명칭을 정할 때, 보통 영어, 한글, 숫자 중 몇개를 혼합해서 사용한다.
이때, 한글과 영어는 관계없지만 이름이 숫자로 시작하는 경우 에러가 발생한다.

흔히 이 에러를 피하기 위해 숫자로 시작하는 명칭을 사용하는 경우 따옴표(" 또는 ')로 명칭을 감싸주면 에러가 발생하지 않는데, 칼럼의 경우 칼럼 타입을 같이 지정해줄 때 문제가 발생한다.
내 경우 다음과 같이 잘못된 방법으로 칼럼명을 지정했던 것이 문제였다.

다음과 같은 명령어를 통해 테이블을 생성했는데, 이것이 문제였다.

CREATE TABLE 테이블('1칼럼 TEXT', "2칼럼 INTEGER");

위와 같이 생성하는 경우 "1칼럼"과 "2칼럼"이라는 이름의 칼럼이 생성되는 것이 아니라 "1칼럼 TEXT"와 "2칼럼 INTEGER"라는 이름의 칼럼이 생성되어버린다.
이름이 숫자로 시작하는 칼럼을 생성하는 경우에는 다음과 같은 식으로 명령어를 작성해야 했다.

CREATE TABLE 테이블('1칼럼' TEXT, "2칼럼" INTEGER);

만약 나와 비슷한 상황을 겪고 있다면 테이블에 존재하는 칼럼명 리스트를 호출하여 칼럼이 어떻게 생성되어있는지 확인해보자.
또한 이런 경우 테이블 내 데이터를 호출할 때마다 숫자로 시작하는 칼럼명칭은 별도로 작업해줘야하는데, 이것이 번거롭기 때문에 숫자가 아닌 텍스트로 시작하도록 칼럼명을 변경하였다.

테이블에 존재하는 칼럼 이름 리스트 호출하는 방법

다음 명령을 통해 특정 테이블에 존재하는 column name 모두 가져올 수 있다.

SELECT name FROM pragma_table_info('{테이블 이름}')


공감 : 0







white.seolpyo.com