Tcl & Tk/팁 (Tip)
sqlite의 이용한 Save As 구현
티클러
2025. 3. 24. 10:39
현재 Tcl 프로그램의 데이터 관리를 sqlite를 사용하여 관리하고 있습니다. 이것저것 신경 쓸 거 없어 좋네요. Save As를 구현하려다 보니 아래의 코드가 만들어졌습니다. src.sql 파일은 미리 존재해야 하고, 상황에 따라 파일을 복사해서 Save As를 구현해도 되지만, db1(src.sql) 이 열려 있는 상태에서는 아래와 같이 하는 방법이 좋은 것 같습니다.
#sqlite db1 "src.sql"
sqlite db2 "dest.sql"
db1 eval { SELECT name FROM sqlite_master WHERE type = "table" } row {
set table $row(name)
# 테이블 생성
set query "PRAGMA table_info('$table');"
set result [db1 eval $query]
puts $result
set query "CREATE TABLE $table ("
foreach {cid name type null def pkey} $result {
append query "$name $type, "
}
set query [string range $query 0 end-2]
append query ")"
db2 eval $query
# 필드 값 삽입
db1 eval "SELECT * FROM $table" row2 {
set query "INSERT INTO $table VALUES("
set columns $row2(*)
set values [list]
foreach column_name $columns {
append query "\"$row2($column_name)\", "
}
set query [string range $query 0 end-2]
append query ")"
db2 eval $query
}
}
#db1 close
db2 close