HOWTO · SQLite
SQLite 테이블 설명
이 문서에서는 `.schema`, PRAGMA 또는 `sqlite_schema`를 사용해 SQLite 테이블을 살펴보는 방법을 설명합니다.
이 페이지의 내용
SQLite에는 DESCRIBE 명령이 없습니다. 테이블을 살펴보려면 SQLite 명령줄 셸에서 .schema 명령으로 CREATE TABLE 문을 확인하거나, PRAGMA table_info로 열 메타데이터를 확인하거나, sqlite_schema를 조회해 저장된 정의를 가져오면 됩니다. 이 방법들은 서로 관련은 있지만 답하는 질문은 다릅니다. 스키마 텍스트는 테이블이 어떻게 정의되었는지 보여 주고, PRAGMA는 열마다 한 행을 반환합니다.
SQLite에서 테이블 구조 확인하기
필요한 정보에 따라 방법을 선택하세요. SQL 정의가 필요하면 .schema를, 열과 각 속성을 구조화된 목록으로 확인하려면 PRAGMA table_info를, SQL로 정의를 찾으려면 sqlite_schema를 사용하세요. 먼저 SQLite 명령줄 셸의 .tables 명령으로 정확한 테이블 이름을 확인할 수 있습니다.
SQLite 명령줄 셸에서 .schema 사용하기
.schema는 SQLite 명령줄 셸이 인식하는 점 명령입니다. SQL이 아니므로 데이터베이스 라이브러리에 SQL 문으로 전달할 수 없습니다. 특정 테이블의 정의를 표시하려면 .schema employee를 입력하세요. 셸은 선언된 열과 제약 조건을 포함한 해당 CREATE TABLE 문을 출력합니다. 사용 가능한 테이블을 나열하려면 .tables를 입력하세요. 들여쓰기된 스키마 출력을 보려면 .schema --indent를 사용하세요.
.schema employee를 실행해도 아무것도 출력되지 않는다고 해서 테이블이 없다고 단정하지 마세요. .tables의 결과와 대조해 철자와 대소문자를 확인하고, 셸이 의도한 데이터베이스 파일에 연결되어 있는지도 확인하세요. 아래처럼 sqlite_schema를 조회할 수도 있습니다. 조회 결과가 비어 있는 이유는 이름이 일치하지 않거나 다른 데이터베이스를 살펴보고 있기 때문일 수 있습니다.
PRAGMA table_info 및 PRAGMA table_xinfo 사용하기
PRAGMA table_info(employee);를 실행하면 일반 테이블의 각 열에 대해 한 행씩 반환됩니다. 결과에는 열의 위치(cid), 이름, 선언된 형식, 필수 여부(notnull), 기본값(dflt_value), 기본 키에 포함되는지 여부(pk)가 들어 있습니다. 이 결과는 원래의 CREATE TABLE 텍스트가 아니라 구조화된 메타데이터이므로, .schema와 같은 방식으로 모든 테이블 제약 조건을 보여 주지는 않습니다.
숨겨진 열이나 생성된 열도 확인해야 한다면 사용 중인 SQLite 빌드가 지원하는 경우에만 PRAGMA table_xinfo(employee);를 사용하세요. 이 명령은 table_info의 열에 열 상태를 나타내는 hidden 필드를 더해 반환합니다. 사용 중인 빌드에서 이 명령을 지원하지 않으면 table_info가 보고하는 열을 확인하거나 해당 빌드의 설명서를 참고하세요. 여기서는 특정 SQLite 버전 경계를 가정하지 않습니다.
테이블 정의를 위해 sqlite_schema 조회하기
sqlite_schema에는 테이블, 인덱스, 뷰, 트리거의 스키마 항목이 저장됩니다. SQL로 테이블 정의를 가져오려면 테이블 이름과 객체 유형을 조건으로 지정하세요.
쿼리는 SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = 'employee';입니다.
sql 열에는 객체를 정의하는 데 사용된 SQL 텍스트가 들어 있으며, 일부 내부 인덱스의 경우에는 NULL입니다. 이전 이름인 sqlite_master는 sqlite_schema의 별칭이지, 테이블 이름을 인수로 받는 명령이 아닙니다. 스키마 카탈로그 테이블을 직접 수정하지 마세요. SQLite는 데이터베이스 객체가 바뀔 때 이 테이블을 관리하며, 직접 수정하면 데이터베이스가 손상될 수 있습니다.
예제: 직원 테이블 살펴보기
이 Python 예제는 작은 인메모리 데이터베이스를 만들고 직원 테이블을 살펴봅니다. SQLite의 DB-API를 사용하므로 셸 점 명령 없이 실행할 수 있고, 데이터베이스도 예제 안에서 자체적으로 구성됩니다.
다음 예제를 실행하세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
import sqlite3
connection = sqlite3.connect(":memory:")
connection.execute(
"CREATE TABLE employee ("
"id INTEGER PRIMARY KEY, "
"name TEXT NOT NULL, "
"dept TEXT NOT NULL, "
"salary TEXT NOT NULL)"
)
columns = connection.execute("PRAGMA table_info(employee)").fetchall()
for column in columns:
print(column[1], column[2], "primary key=" + str(bool(column[5])))
definition = connection.execute(
"SELECT sql FROM sqlite_schema WHERE type = ? AND name = ?",
("table", "employee"),
).fetchone()[0]
print(definition)
connection.close()
PRAGMA 결과의 각 행은 열 하나를 나타내며, id가 기본 키임을 표시합니다. 카탈로그 조회 결과에는 테이블의 CREATE TABLE 텍스트가 들어 있습니다. 셸에서는 .schema employee로 해당 정의를 간편하게 표시할 수 있습니다. 열 속성을 프로그램에서 처리해야 한다면 PRAGMA를 사용하세요.