読者です 読者をやめる 読者になる 読者になる

RからDBに接続する方法(PostgreSQL, MySQL, SQLite)

スポンサーリンク

RからDBに接続する方法をまとめました。今回はRDBを対象にしていますが、NoSQLに接続する用のパッケージもあります。

DBIパッケージ

まずはDBに接続するために共通して必要になるDBIパッケージをインストールします。DBIパッケージは、異なるデータベース間で共通のインターフェースを提供しています。

> install.packages("DBI")

PostgreSQL

RPostgreSQLパッケージをインストールします。

> install.packages("RPostgreSQL")

CentOSで以下のようなエラーが出てパッケージのインストールに失敗した場合はpostgresql-develをインストールしてください。

make: *** [RS-PQescape.o] Error 1
ERROR: compilation failed for package ‘RPostgreSQL’
* removing ‘/home/ruser/R/x86_64-redhat-linux-gnu-library/3.2/RPostgreSQL’
Warning in install.packages :
  installation of package ‘RPostgreSQL’ had non-zero exit status
...
$ sudo yum install postgresql-devel

DBIパッケージはRPostgreSQLパッケージによって一緒に読み込まれるので明示的に読み込まなくてもいいです。RPostgreSQLを使用すれば AWS の Redshift に接続することも可能です。

> require("DBI")  # 必須ではない
> require("RPostgreSQL")
> con <- dbConnect(PostgreSQL(), host="hostname", port=port, dbname="dev", user="user", password="password")
> dataset <- dbGetQuery(con,"SELECT * FROM users")
> print(dataset)

dbConnect()の第1引数はDBのドライバを指定しますが、PostgreSQL()RPostgreSQLパッケージの関数で、ドライバを返すものです。代わりにdbDriver("PostgreSQL")としてもRPostgreSQLパッケージがインストールされていれば探してドライバを返してくれます。

> class(dataset)
[1] "data.frame"

dbConnect()dbGetQuery()DBIパッケージの関数ですが、その他にも以下の関数があります。library(help="DBI")で表示された関数のみまとめました。dbGetQuery()dbSendQuery()dbFetch()dbClearResult()などをまとめたような関数です。

関数 機能
dbDisconnect(con) DBの接続を切断
dbDriver(drvName) DBのドライバーを返す
dbExistsTable(con, name) 接続DBからテーブルの存在確認
dbGetException(con) 接続DBのエラーコード、メッセージを取得
dbGetInfo(con | res) 接続DBの情報 / DBIResultの情報
dbDataType(con, obj) DataTypeを表示
dbIsValid(con) 接続の有効を確認
dbListConnections(driver) 対象ドライバーの接続情報を取得
dbListTables(con) 接続DBのテーブル一覧
dbReadTable(con, name) テーブルを読み込む(データフレームが返される)
dbWriteTable(con, name, value..) テーブルに書き込む
dbSendQuery(con, sql) SQLを実行して結果をDBIResultで受け取る
dbFetch(res) or fetch(res) DBIResultから結果を取得
dbHasCompleted dbGetInfo(res)のCompleted
dbGetStatement dbGetInfo(res)のStatement
dbGetRowCount dbGetInfo(res)のrowCount
dbGetRowsAffected dbGetInfo(res)のrowsAffected
dbClearResult DBIResultの結果をクリア
dbColumnInfo DBIResultからカラム情報を取得
dbRemoveTable(con, name) テーブル削除
dbListFields(con, name) テーブルのフィールド情報を取得
dbListResults(con) 残ってる結果を表示

使用方法の参考: MySQL and R | R-bloggers

MySQL

RMySQLのパッケージをインストールします。

> install.packages("RMySQL")
> require("RMySQL")
> con <- dbConnect(MySQL(), host="hostname", port=port, dbname="dev", user="user", password="password")
> dataset <- dbGetQuery(con,"SELECT * FROM users")
> print(dataset)

SQLite

RSQLiteのパッケージをインストールします。

> install.packages("RSQLite")
> require("RSQLite")
> con <- dbConnect(MySQL(), host="hostname", port=port, dbname="dev", user="user", password="password")
> dataset <- dbGetQuery(con,"SELECT * FROM users")
> print(dataset)

RODBC

上記の他にODBCを利用して接続したい場合はRODBCパッケージをインストールします。DBIパッケージを使用する方が簡単なので、対応していないRDBでない限りDBIパッケージを使用しましょう。RODBCの説明はここでは省きます。

> install.packages("RODBC")