HOWTO · SQLite
SQLite 데이터베이스에서 열 이름 가져오기
SQLite 데이터베이스에서 열 이름 및 관련 세부 정보를 검색하는 방법을 알아보세요.
이 페이지의 내용
SQLite에서 테이블의 열 이름을 확인하려면 PRAGMA table_info(table_name)을 실행하고 반환된 각 행의 name 필드를 읽으세요. table_name을 테이블 이름으로 바꾸면 됩니다. 같은 메타데이터는 Python의 sqlite3에서도 확인할 수 있습니다. 이름만 조회하는 SQL 쿼리가 필요하다면 사용 중인 SQLite 런타임에서 지원하는 경우 pragma_table_info 테이블 반환 함수를 사용하세요.
PRAGMA table_info로 열 이름 가져오기
PRAGMA table_info는 일반 열마다 한 행을 반환합니다. 각 행의 name 필드에는 열 이름이, type에는 선언된 형식이 들어 있습니다. notnull은 열에 NOT NULL 제약 조건이 있는지 나타내고, dflt_value에는 기본값 표현식이 들어 있으며 기본값이 없으면 NULL입니다. pk는 해당 열이 기본 키에 포함되는지 나타냅니다. cid 필드는 테이블에서 해당 열의 순서를 0부터 표시합니다. 테이블에 생성된 열이나 숨겨진 열이 있으면 이 결과만으로 전체 열 목록을 얻을 수 없습니다. 그런 열도 포함하려면 PRAGMA table_xinfo를 사용하세요. 일반적인 테이블 정의가 필요한지, SQLite가 보고하는 모든 열이 필요한지에 따라 pragma를 선택하면 됩니다.
아래의 독립 실행형 Python 예제는 메모리에 작은 테이블을 만들고 메타데이터를 가져와 이름을 출력합니다. 테이블 이름은 SQL 식별자이므로 값 매개변수로 전달하는 대신 PRAGMA 문에 직접 씁니다. 예제 테이블에서 반환된 열 이름이 출력됩니다.
import sqlite3
with sqlite3.connect(":memory:") as connection:
connection.execute(
"CREATE TABLE people (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER)"
)
rows = connection.execute("PRAGMA table_info(people)").fetchall()
column_names = [row[1] for row in rows]
print(column_names)
['id', 'name', 'age']
이 방법은 열 이름과 세부 정보를 함께 확인하거나 SQLite의 PRAGMA 인터페이스를 통해 사용할 수 있는 방법이 필요할 때 적합합니다. 연결된 데이터베이스에 있는 테이블이라면 PRAGMA archive.table_info(people)처럼 PRAGMA 형식에 스키마를 지정하세요.
pragma_table_info 테이블 반환 함수로 열 이름 조회하기
SQLite 런타임에서 이 테이블 반환 함수를 지원한다면 SELECT name FROM pragma_table_info('people');로 이름만 조회할 수 있습니다. 이 쿼리는 모든 메타데이터 필드 대신 행마다 이름 하나를 반환합니다. 연결된 스키마의 테이블을 확인하려면 함수의 두 번째 인수로 스키마 이름을 전달하세요. 예를 들면 SELECT name FROM pragma_table_info('people', 'archive');와 같습니다.
Python에서도 같은 SQL을 사용하고 각 결과 행의 첫 번째 값을 읽습니다. 아래의 독립 실행형 예제는 앞의 예제와 같은 people 테이블을 만들어 쿼리가 서로 일치합니다. SQLite의 운영 오류를 처리해 함수의 사용 가능 여부를 확인하고, 사용 가능한 경우 이름을 출력합니다.
import sqlite3
with sqlite3.connect(":memory:") as connection:
connection.execute(
"CREATE TABLE people (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER)"
)
try:
rows = connection.execute(
"SELECT name FROM pragma_table_info('people')"
).fetchall()
except sqlite3.OperationalError as error:
print(f"pragma_table_info is unavailable: {error}")
else:
print([row[0] for row in rows])
사용 가능 여부는 현재 사용하는 SQLite 런타임에 따라 달라집니다. 이 함수를 사용할 수 없다면 PRAGMA table_info를 대신 사용하세요. 열 메타데이터를 다른 SQL 필터나 조인과 결합하려는 경우에는 함수 형식이 유용합니다.
SQLite 명령줄 셸에서 열 이름 가져오기
SQLite 명령줄 셸에서 sqlite3 path/to/database.db로 데이터베이스를 연 다음 PRAGMA table_info(people);를 입력하세요. 결과의 name 열에서 열 이름을 확인할 수 있으며, 다른 필드에는 앞서 설명한 메타데이터가 들어 있습니다. 결과를 더 읽기 쉽게 보려면 먼저 .headers on과 .mode column을 입력하세요. 이 점 명령은 셸의 결과 표시 방식을 바꾸는 설정이지 SQL이 아니며, 메타데이터를 직접 가져오지는 않습니다.