DBアクセスのお供format関数

人工知能技術 セマンティックウェブ技術 オントロジー技術 検索技術    データベース技術  デジタルトランスフォーメーション技術  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"

地味だが、覚えておくと便利な関数だ。

コメント

  1. […] DBアクセスのお供format関数 queryの自動生成 […]

  2. […] 展開することが可能となる。(バッククォートでの展開はLISPでのマクロ展開の適用となる。同様なテンプレート文字列の話はclojureでの”DBアクセスのお供format関数“にも述べている) […]

タイトルとURLをコピーしました