トップ > 技術メモ (ソフトウェア開発) > はすけるで遊ぶ >

Haskellでデータベース操作

(2009.5.11 新規作成。)

Haskellのパッケージシステム (Cabal)

HaskellにはCabalというパッケージシステムがあります。RubyでいうRubyGemsのようなものです。

Fedora 10 LinuxのGHCにはCabalシステムは含まれますが、コマンドとしてのcabal (cabal-installツール) は含まれないため、別途インストールします。

cabal-installのインストール

次のサイトのDownload のページから、cabal-install をダウンロードします。2009.4現在の最新版はバージョン0.6.2です。

展開して、一般ユーザで bootstrap.sh を実行するだけでOKです。~/.cabal/bin にcabalコマンドがインストールされます。

個別のパッケージは、

で探します。各パッケージのページにソースコードが置いてありますが、cabalコマンドが自動で取ってきてくれるので、自分でダウンロードする必要はありません。

cabalコマンド

パッケージをインストールするときは、次のようにします。--dry-runを付けると何が行われるか表示されるだけで、実際にインストールはされません。

$ cabal install HDBC-postgresql --dry-run

内容を確認してから、--dry-runオプションなしで実行します。

Haskellでデータベース

HaskellからRDBMSを操作するライブラリには次のものがあります。

haskelldb: SQL unwrapper for Haskell
SQLを使わず、Haskellの文法で書く
hsql: Simple library for database access from Haskell
文字列でSQLを与える
Haskell Database Connectivity (HDBC)
文字列でSQLを与える。DBIに似た感じ。

hsqlとHDBCは、直接SQLを書くもので、似ています。

見たところ、hsqlはplaceholder の書き方が分からなかったため、HDBCのほうがよさそうです。

HDBC

データベースに接続し、テーブルを作って行を挿入するサンプルを書いてみます。コンパイルは次のようにします。

$ ghc -package HDBC-sqlite3 db.hs
[POPUP]
  1. import Database.HDBC
  2. import Database.HDBC.Sqlite3
  3. main = do
  4. -- データベースへの接続はRDBMS依存.
  5. conn <- connectSqlite3 "test.db"
  6. run conn "CREATE TABLE foo (a int primary key, b varchar(100));" []
  7. -- 引数はそれぞれtoSqlを付ける。
  8. run conn "INSERT INTO foo VALUES (?, ?)" [toSql (1::Int), toSql "hoge"]
  9. -- 自動コミットではない
  10. commit conn

SQL文に埋め込む値はそれぞれtoSqlを付けます。

Haskellではあるリストの要素は同じ型でなければなりませんが、埋め込む値はそれぞれ違う型ですし、SQLにはナル値があったりもします。

toSqlは次の型を持ち、SqlValue型に揃えます。

[POPUP]
  1. Database.HDBC.toSql ::
  2. (Data.Convertible.Base.Convertible a Database.HDBC.SqlValue.SqlValue) =>
  3. a -> Database.HDBC.SqlValue.SqlValue

型を実行時にしか見ないスクリプト言語に比べるとちょっと面倒ではあります。

haskelldb

Haskellでは演算子を自由に定義できることを活かして、HaskellのコードをSQLにマップするライブラリです。

SQLを実行しなくても、Haskellのコンパイル時にSQLの誤りを検出できます。

TODO: サンプル、説明を追加。


トップ > 技術メモ (ソフトウェア開発) > はすけるで遊ぶ > Haskellでデータベース操作
このページについてのご感想・ご提案などをお寄せください。なお、コメントに「http:」、HTML aタグが含まれると送信されません。
評価: ◎ ← → ×
コメント:
お名前:
メールアドレス:
[Profile]  [Privacy Policy]  [Legal & Link]  [Site Map]  

banner Netsphere Laboratories http://www.nslabs.jp/

Copyright (c) HORIKAWA Hisashi. All rights reserved.

[PR]

はてなブックマークに追加  

サイト内検索:

[PR]