RからSQLiteを使う

SQLite はパブリックドメインのリレーショナルデータベース管理システムである。非常に軽く,小規模のデータベース構築によく使われる。Macにも /usr/bin/sqlite3 というコマンドが入っている。

リレーショナルデータベースやSQLに疎いかたは私のデータベースのページを参照されたい。

RからSQLiteを使うには RSQLite パッケージを使う。現在は Hadley Wickham がメンテナンスしており,開発版はGitHubの hadley/RSQLite にある。

install.packages("RSQLite")
library("RSQLite")
con = dbConnect(SQLite(), "tmp.db", synchronous="off")

dbConnect() の最初の引数は必ず SQLite() とする。2番目の引数はデータベースファイルのファイル名(パス)である。ただし,空文字列 "" はテンポラリファイルで自動消去される。":memory:" はメモリ上に作成される。オプション synchronous="off" を付けておくとSQLiteへの書き込みがかなり速くなる可能性がある。

dbSendQuery(con, "create table hoge(hinmei text, nedan int)")
dbListTables(con)
[1] "hoge"
dbListFields(con, "hoge")
[1] "hinmei" "nedan"
dbSendQuery(con, "insert into hoge values('りんご', 500)")
dbSendQuery(con, "insert into hoge values('みかん', 300);")
dbGetQuery(con, "select * from hoge")
  hinmei nedan
1 りんご   500
2 みかん   300
dbSendQuery(con, "update hoge set nedan=200 where hinmei='みかん'")
dbGetQuery(con, "select * from hoge")
  hinmei nedan
1 りんご   500
2 みかん   200
dbReadTable(con, "hoge")
  hinmei nedan
1 りんご   500
2 みかん   200
dbWriteTable(con, "iris", iris)
[1] TRUE
dbListTables(con)
[1] "hoge" "iris"
dbGetQuery(con, "select * from iris order by 'Sepal.Length' limit 3")
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
dbDisconnect(con)

dbGetQuery()dbReadTable() の返す値は data.frame であるが,文字列を自動で factor に変換することはない。

dbDisconnect() でRからの接続は切れるが,ファイル(上の例では tmp.db)は残っているので,Mac(またはLinux)のターミナルで sqlite3 tmp.db と打ち込むとデータベースを開くことができる。逆に sqlite3 コマンドで作ったデータベースをRSQLiteで開くことも当然できる。