본문으로 바로가기

SQLite의 Tcl 인터페이스 tclsqlite

category 카테고리 없음 2024. 6. 17. 11:57

tclsqlite는 오픈소스의 RDBMS SQLite에 접근하기 위한 Tcl 인터페이스로, SQLite 배포본과 함께 배포되고 있습니다. SQLite는 2004년 7월 13일에 PHP 5.0에 번들로 공개된 것으로 유명해졌으며, SQL92에 준거한 RDBMS 오픈 소스입니다. 단, MySQL이나 PostgreSQL은 서버 사이드 애플리케이션이며, SQLite는 1 디비(DB) 1 파일(File) 구성의 로컬 파일에, 제공하는 API로부터 접속하여 데이터 조작을 지향하는, 마이크로 소프트사의 Access에 가까운 이미지입니다. 여기에서 다루는 tclsqlite도 그러한 API 중의 하나입니다. SQLite 개발자가 tclsqlite도 동시에 개발 및 배포되고 있으므로, 표준이면서 유일한 SQLite-Tcl 인터페이스가 될 것입니다.

설치

SQLite의 소스로부터의 설치 방법에 대해서는 홈페이지의 문서를 따라 주시면 되므로 여기서는 다루지 않습니다. 윈도우즈, 리눅스용의 바이너리 파일도 홈페이지에서 배포되고 있기 때문에, 바로 사용하시는데 문제는 없을 것입니다. 여기서는 윈도우즈용 바이너리를 사용하는 것으로 진행합니다. 우선 현재 최신 버전인 tclsqlite-3_5_5.zip 파일을 다운로드합니다. 다음 압축을 해제한 후 다음과 같은 순서로 패키지 인덱스 파일을 생성합니다.

$ tclsh
% pkg_mkIndex


생성된 패키지 인덱스 파일 pkgIndex.tcl의 내용은 다음과 같습니다.

# Tcl package index file, version 1.1
# This file is generated by the "pkg_mkIndex" command
# and sourced either when an application starts up or
# by a "package unknown" script.  It invokes the
# "package ifneeded" command to set up package-related
# information so that packages will be loaded automatically
# in response to "package require" commands.  When this
# script is sourced, the variable $dir must contain the
# full path name of this file's directory.
 
package ifneeded sqlite 3.0 [list load [file join $dir tclsqlite3.dll]]
package ifneeded sqlite3 3.0 [list load [file join $dir tclsqlite3.dll]]

이것으로 tclsh을 실행하여

package require sqlite


를 입력한 후, 버전 표시가 된다면 sqlite를 정상적으로 사용할 수 있습니다.

기본적인 사용방법

package require sqlite
 
file delete test.db
 
sqlite d test.db
 
# 테이블 생성
d eval {CREATE TABLE game(title text, year int, publish text)}
 
d eval {INSERT INTO game VALUES('원숭이섬의비밀1', 1990, '루카스아츠')}
d eval {INSERT INTO game VALUES('원숭이섬의비밀2', 1992, '루카스아츠')}
d eval {INSERT INTO game VALUES('룸', 1990, '루카스아츠')}
 
d eval {
        SELECT title, year, publish FROM game
        ORDER BY year
} values {
        parray values
        puts ""
}
 
d close
# end.


tclsqlite를 사용하기 위해 sqlite 패키지를 로드합니다. 데이터베이스에 접속하기 위해 sqlite 식별자 파일패스를 사용합니다. 식별자는 보통 Tcl의 네이밍 룰에 따르면서 자유롭게 정의할 수 있으며, 후에는 식별자를 커맨드로 사용합니다. 커맨드를 사용하기 위한 중요한 옵션은 eval과 close입니다. eval은 SQL 명령을 실행하며, close는 접속을 해제합니다. eval의 기본적인 인자는 SQL 명령문이지만, 예와 같이 그 후에 배열 변수명을 붙이면 SQL 명령문 SELECT의 결과가 배열에 대입되게 되며, 그 후에 인자로서 지정한 Tcl 스크립트를 수행하게 됩니다. values의 값은, fetch 한 레코드의 칼럼 이름(field name)의 해쉬 배열입니다. 위의 코드에 있는 것처럼, parray의 커맨드를 사용하면 배열 내의 요소, 즉 레코드의 내용을 덤프 할 수 있습니다.

values(*)       = title year publish
values(publish) = 루카스아츠
values(title)   = 원숭이섬의비밀1
values(year)    = 1990

values(*)       = title year publish
values(publish) = 루카스아츠
values(title)   = 룸
values(year)    = 1990

values(*)       = title year publish
values(publish) = 루카스아츠
values(title)   = 원숭이섬의비밀2
values(year)    = 1992

마치며

사실 대부분이 SQL 문법만 알면 쉽게 사용할 수 있는 패키지입니다. 다양한 예제와 자세한 사용 방법은 http://www.sqlite.org/tclsqlite.html를 참고하세요.

 

MySQL vs SQLite의 속도 비교: http://reddog.s35.xrea.com/archives/sqlite_speed_test_win.html