[Common Lisp] PostgreSQL に Postmodern でアクセスする
Common Lisp で DB アクセスするなら CLSQL が定番ですが、PostgreSQL 限定ならよりかゆいところに手がとどく Postmodern がおすすめです。
text タイプやオートナンバ等が使えます。
#|
sudo -u postgres createuser -P
ancient/password
|#
(eval-when (:load-toplevel :compile-toplevel :execute)
(require :postmodern))
(defparameter *db* "ancient")
(defparameter *user* "ancient")
(defparameter *passwd* "password")
(defparameter *host* "localhost")
(postmodern:with-connection (*db* *user* *passwd* *host*)
(print (postmodern:query "select 'あ'")) ; query
(postmodern:deftable table1 () ; defclass と似た感じでテーブル定義
((field1 :accessor field1 :type string :initarg :field1))
(:class-name table1)
(:auto-id t)) ; オートナンバ
(defmethod print-object ((table1 table1) stream)
(print-unreadable-object (table1 stream :type t :identity t)
(format stream "~a: ~a" (postmodern:get-id table1) (field1 table1))))
(ignore-errors
(postmodern:drop-table 'table1)) ; テーブル削除(エラーは無視)
(postmodern:create-table 'table1) ; テーブル作成
(loop for i from 1 to 5
do (postmodern:save-dao ; インサート
(make-instance 'table1 :field1 (format nil "あいう~a" i))))
(let ((x (postmodern:get-dao 'table1 3))) ; プライマリキーで select
(print x)
(setf (field1 x) "修正")
(postmodern:save-dao x)) ; 更新
(let ((x (car (postmodern:select-dao 'table1 (:= 'field1 "修正")))))
(print x)
(postmodern:delete-dao x)) ; 削除
(print (postmodern:query "select * from table1"))
)
ところで Emacs の htmlize を使ってみました。
0 件のコメント:
コメントを投稿