人工知能技術 セマンティックウェブ技術 オントロジー技術 検索技術 データベース技術 デジタルトランスフォーメーション技術 Visualization & UX ワークフロー&サービス. プログラミング Clojure データベース技術
Clojureでデータベースにアクセスする際に、SQL等のクエリ文の一部を変数とするとフレキシブルなデータベースアクセスが実現できる。それを美しく実現するのが「format関数」だ。基本的な使い方としては以下のようなものとなる。
user=> (format "Hello there, %s" "bob")
"Hello there, bob"
%sはstring変数を表し、数字の場合は%dや%o,%xを使い分ける。これを例えばSQLのDBにアクセスする場合は
(defn db-query [q1 q2]
(jdbc/query db-spec
(format "select %s from member where id = %s" q1 q2))
とすると、q1で出力を、q2でidを変数として扱う関数に変換できる。
また、結果をtextの中に代入して出力する場合にも便利だ
(defn output-text [x] (format "今回の結果は%sです。" x)
また、数字の出力の場合は以下のように変数の指定で変形もできる。
user=> (format "%5d" 3)
" 3"
user=> (format "Pad with leading zeros %07d" 5432)
"Pad with leading zeros 0005432"
user=> (format "Left justified :%-7d:" 5432)
"Left justified :5432 :"
user=> (format "Locale-specific group separators %,12d" 1234567)
"Locale-specific group separators 1,234,567"
user=> (format "decimal %d octal %o hex %x upper-case hex %X" 63 63 63 63)
"decimal 63 octal 77 hex 3f upper-case hex 3F"
user=> (format "%2$d %1$s" "Positional arguments" 23)
"23 Positional arguments"
地味だが、覚えておくと便利な関数だ。
コメント
[…] DBアクセスのお供format関数 queryの自動生成 […]
[…] 展開することが可能となる。(バッククォートでの展開はLISPでのマクロ展開の適用となる。同様なテンプレート文字列の話はclojureでの”DBアクセスのお供format関数“にも述べている) […]