[Python] SQLite3 DB의 테이블 칼럼 이름 알아내기

테이블의 칼럼 이름을 기억하기 힘든 경우에는  CREATE TABLE 명령을 따로 복사해서 보관하거나,  아예 종이에 출력해 두기도 하는데 만약 내가 만든 테이블이 아닌 경우에는 SQLite3 쉘을 실행해서 .schema 명령으로 테이블 스키마를 확인해야 한다. (사실 이것도 상당히 바람직한 방법인데, 윈도 시스템에서 이 작업을 할 수 있는 방법에 대해서는 조만간 다시 글을 하나 쓸 생각이다.)

어쨌든 이번에는  파이썬에서 sqlite 테이블의 칼럼 이름들만 뽑아내는 방법을 소개한다. DB 커넥션 객체의 row_factory를 이용하는 데, 기본으로 이 속성은 None으로 지정되어 있다. 커서를 생성하기 전에 sqlite3.Row 클래스로 지정해주면 상당히 편리하게 작용하게 된다. 간단한 예제를 살펴보자.

row_factory가 지정된 연결의 커서로 SELECT 문을 수행하면 fetch 되는 각각의 row 의 데이터는 Row 클래스의 객체가 되고, 이 객체를 통해 튜플 형식이 아니라 사전과 비슷하게 키-값 쌍으로 검색해온 데이터에 접근할 수 있게된다.

이 때 Row의 키가 테이블의 칼럼이 되므로 .key()  메소드를 통해 칼럼 이름 전체를 얻을 수 있다.

아무튼 다음 코드는 놀랄만큼 평범하면서 많은 장점을 가져다주므로, 한 번 눈여겨 봐둘 필요가 있다.

#! C:/python27/python.exe

import sqlite3 as lite

database_filename = 'test.db'

conn = lite.connect(database_filename)
conn.row_factory = lite.Row

cs = conn.cursor()
cs.execute('SELECT * FROM t1')
r = cs.fetchone()
print r
print r['name']
print type(r)
print r.keys()