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で開くことも当然できる。