【R言語】DB(MySQL)からデータを抽出!
おはようございます。こんにちは。こんばんは。
今回はR言語で DB(MySQL)に接続し、データを抽出してみます。
R studioで DBI と MySQL のパッケージをインストール
まずは、前回の「音を鳴らす」でも行ったパッケージをインストールします。
今回インストールするのは DBI と MySQL のパッケージです。
前回と同じく、R studio のConsole からインストールしましょう。
DBI
install.packages("DBI")
MySQL
install.packages("RMySQL")
こちらは、「パッケージのソースからインストールを行いますか? (コンパイルが必要です) 」と聞かれますので、y を入力して、インストールしてください。
DBを準備
今回のテスト用にAWS RDSを使用してDBを作りました。
こんなテーブルに
CREATE TABLE `t_shakkinengineer` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `created_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
こんなデータを
用意しました。
DBからデータを抽出!
では本題のデータ抽出に入ります。
今回は次のような動作をするスクリプトを作成します。
- DBに接続
- t_shakkinengineerテーブルのデータを全件抽出
- Consoleにデータを表示
- (おまけ)データを表示したことを音を鳴らして通知
(音での通知、便利ですよ〜)
スクリプト全体
細かい説明は後にして、まずはスクリプト全体です。
db_select <- function(){ # インストールしたパッケージの読み込み library("RMySQL") library("beepr") # DB接続設定 conn <- dbConnect( drv = RMySQL::MySQL(), dbname = "shakkinengineer", host = "shakkinengineer.cmztc5ttdocl.ap-northeast-1.rds.amazonaws.com", username = "shakkinengineer", password = "shakkinengineer" ) # 関数終了時にDB切断 # on.exitで関数終了時の処理を指定する # add = TRUEは指定した処理を終了時処理に追加する on.exit(dbDisconnect(conn), add = TRUE) # SQL文を変数sqlに格納 sql <- "SELECT * FROM t_shakkinengineer;" # DBに接続、SQLを実行し、結果を変数dataに格納 data <- dbGetQuery(conn, sql) # Console に 変数dataを表示 print(data) # 音を鳴らす! beep(sound = 3, expr = NULL) return() }
スクリプト実行結果
次にスクリプトを実行した結果です。
ばっちり抽出できてますね。
ちゃんと音も鳴りました!
「NULL」はスクリプト中のreturn()
で何も実行結果を返していないため表示されています。
警告も出ていますが、RMySQLのバージョンが古いと出るみたいです。
この記事に、バージョンを上げて、警告を解消する方法が書かれているので、気になる方は試してみてください。 qiita.com
スクリプトの作り方、実行方法は以前記事にしているので、こちらも参考にしてください。 www.shakkinengineer.com
スクリプトで使用している関数・コマンド
最後にスクリプトで使用している関数を見ていきます。
library()
library()
はパッケージを読み込む関数です。
あれ?DBIは?と思いますよね。
RMySQLを読み込むと、DBIも読み込まれるようです。
確かめていませんが、library("DBI")
は不要です。
dbConnect()
dbConnect()
は見たまんま、DBに接続する関数です。
DBとの接続情報を変数connに格納しています。
on.exit()
on.exit()
はスクリプト終了時に実行する処理を設定する関数です。
エラーで終了になった場合も、ここで設定した処理が実行されるので、DBとの接続を切断する処理をこの関数で設定します。
addオプションには「TRUE」「FALSE」が指定できます。
「TRUE」は処理を追加、「FALSE」は処理を書き換えます。
dbDisconnect()
dbDisconnect()
も見たまんまですね。DBとの接続を切断する関数です。
引数には接続情報を設定します。
今回のスクリプトではon.exit()
でスクリプト終了時に実行する処理として設定しましたので、接続後にすぐ切断しているように見えますが、最後に実行されます。
dbGetQuery()
dbGetQuery()
も見たまんまでしょうか。SQL文をDBに渡し、結果をGETする関数です。
関数の説明には「Send query, retrieve results and then clear result set」となっていて、dbSendQuery()
、dbFetch()
、dbClearResult()
の3つの関数が実行されているようです。
引数には接続情報とSQL文を設定します。
おわりに
いかがでしたでしょうか?
1回できれば、簡単です。
ちなみに、dbGetQuery()
で抽出したデータはリスト型になっています。
リスト型データの扱いについても、後日記事にしたいと思っています。
以上です。