SinatraのメモアプリをDB化するにあたりpg gemを使いPostgreSQLに接続しSQLを実行する方法を調べました。
結論
次の手順でpg gemでPostgreSQLへ接続しSQLを実行できる。
- PostgreSQLに接続するためのPGオブジェクトを作成。
- 作成したPGオブジェクトからSQLを実行するメソッドを呼び出す。
require 'pg' # PGオブジェクト作成、SQL実行 connection = PG::Connection.new(dbname: 'memo_app') all_memos = connection.exec('SELECT * FROM memos') # DBから取得した結果を出力 all_memos.each do |memo| puts "id: #{memo['id']}, title: #{memo['title']}, content: #{memo['content']}" end # 実行結果 id: bffcbdbf-6191-4057-a8df-d274573a728a, title: test_memo, content: text_content
- SQLを実行して取得したレコードは配列型になっています。
require 'pg'
でgemを読み込むのを忘れずに!
pgとは?
RubyでPostgreSQLを使うためのGem。
DB作成後、PGオブジェクト作成時にdbname
を指定しただけで接続できたので驚いた。
ged/ruby-pg: A PostgreSQL client library for Ruby
PostgreSQLへの接続
Connection.new
を使って接続用のPGオブジェクトを作成します。
PG: The Ruby PostgreSQL Driver
# PGオブジェクトを作成 connection = PG::Connection.new(dbname: 'memo_app')
今回はConnection.new
への引数はdbname
しか指定していませんが、port
やhost
などを渡すこともできるようです。
ちなみに公式のサンプルにあるPG.connect
はPG::Connection.new
のエイリアスのようです。
exec系メソッド
DBににSQLを実行するメソッドです。使用用途別に複数のメソッドが用意されているので必要に応じて選択してください。
pg gem のexec系メソッドの使い分け - karlley's tech blog
今回のサンプルはシンプルにSQLを実行するメソッドであるexec
を使いました。
まとめ
PostgreSQL接続に関する情報が上手く整理できていなかったのでスッキリして良かったです。 プラクティスも終盤なのでがんばります。
参照
ged/ruby-pg: A PostgreSQL client library for Ruby