by Michael Neumann (neumann@s-direknet.de)
日本語訳 KUBO Takehiro (kubo@jiubao.org)
$Original Id: DBI_SPEC,v 1.1 2002/10/02 18:10:37 mneumann Exp $ $Id: DBI_SPEC.ja.html,v 1.2 2003/10/25 18:51:47 kubo Exp $
API_VERSION
VERSION
SQL_FETCH_NEXT
SQL_FETCH_PRIOR
SQL_FETCH_FIRST
SQL_FETCH_LAST
SQL_FETCH_ABSOLUTE
StatementHandle#fetch_scroll
用の定数SQL_BIT
SQL_TINYINT
SQL_SMALLINT
SQL_INTEGER
SQL_BIGINT
SQL_FLOAT
SQL_REAL
SQL_DOUBLE
SQL_NUMERIC
SQL_DECIMAL
SQL_CHAR
SQL_VARCHAR
SQL_LONGVARCHAR
SQL_DATE
SQL_TIME
SQL_TIMESTAMP
SQL_BINARY
SQL_VARBINARY
SQL_LONGVARBINARY
SQL_OTHER
例外クラスは Python 2.0 の API から「拝借」した。
Warning < RuntimeError
Error < RuntimeError
InterfaceError < Error
NotImplementedError < InterfaceError
DatabaseError < Error
データベースに関係するエラー用の例外
err, errstr, state の3つの属性をもつ。
DataError < DatabaseError
OperationalError < DatabaseError
IntegrityError < DatabaseError
InternalError < DatabaseError
ProgrammingError < DatabaseError
NotSupportedError < DatabaseError
DBI.connect( driver_url, user=nil, auth=nil, params=nil )
driver_urlによって指定されるデータベースへ接続する。例えば、 "dbi:Oracle:oracle.neumann"など。
DBI::DatabaseHandle
オブジェクトを戻す。コードブロック付きで
呼ばれたときは、新規のDBI::DatabaseHandle
をパラメータとして
ブロックを実行し、ブロックの終了時に自動的にdisconnect
が呼ばれる。
(ブロック内でユーザにより切断されなかった場合)
DBI.available_drivers
Array
を返す。
DBDドライバを表現する文字列は不完全なDSNです。
(例 "dbi:Oracle:")DBI.data_sources( driver )
DBI.disconnect_all( driver=nil )
DBI.trace(mode=nil, output=nil)
以降作成されるハンドルすべてにトレースモードを設定する。
パラメータにnil
が与えられときは、その値は変更されない。
値が前もって設定されてない場合は、引数がnil
のときはデフォルト
で2となり、outputはSTDERR
となる。
modeには 0, 1, 2, 3 が設定できる。訳者註:トレースモードの分類
注意事項: "dbi/trace" がロードされたときのみトレースが実行される。トレースは AspectR のバージョンが 0.3.3 より上のときのみ有効となる。
すべての"ハンドル"(DriverHandle, DatabaseHandle, StatementHandle)の抽象基底クラス
func( function, *values )
trace(mode=nil, output=nil)
このハンドルとここから生成されたサブハンドル(DriverHandleとDatabaseHandleの場合) に対してトレースモードを設定する。
パラメータにnil
が与えられときは、その値は変更されない。
値が前もって設定されてない場合は、引数がnil
のときはデフォルト
で2となり、outputはSTDERR
となる。
modeには 0, 1, 2, 3 が設定できる。訳者註:トレースモードの分類
注意事項: "dbi/trace" がロードされたときのみトレースが実行される。トレースは AspectR のバージョンが 0.3.3 より上のときのみ有効となる。
DBI::Handle
connected?
true
を戻す。
さもなくばfalse
を戻す。disconnect
prepare( stmt )
prepare( stmt ) {|statement_handle| aBlock}
DBI::StatementHandle
を戻す。
ブロック付きで呼ばれた場合は、ハンドルをパラメータとしてブロックを
実行し、実行終了したら#finish
を呼んですべてのリソースを解放する。execute( stmt, *bindvars )
execute( stmt, *bindvars ) {|statement_handle| aBlock}
bindvarsで与えられた値をプレースホルダーにバインドしてから、 SQL文stmtを即座に実行する。
DBI::StatementHandle
を戻す。ブロック付きで呼ばれば場合は、
ハンドルをパラメータとしてブロックを実行し、実行終了したら#finish
を呼んですべてのリソースを解放する。
do( stmt, *bindvars )
DBI::StatementHandle
を戻すかわりに
処理された行数を戻す。select_one( stmt, *bindvars)
DBI::Row
オブジェクトとして戻す。select_all( stmt, *bindvars)
bindvarsで与えられた値をプレースホルダーにバインドしてから、 SQL文stmtを実行し、結果行をすべて戻す。
イテレータとして呼ばれた場合、ブロックに渡すDBI::Row
オブジェクト
は単なる参照である。訳者註:DBI::Row
tables
columns( table )
DBI::ColumnInfo
オブジェクトの配列を戻す。ping
接続が生きているならばtrue
を戻す。さもなくばfalse
を戻す。
connected?とは異なり、pingテストはSQLを実行するなどして 接続が生きているかどうか確認する。
quote( value )
commit
rollback
transaction {|database_handle| aBlock}
[attr]
[attr] = val
true
もしくは
false
を設定できる。指定できる属性はデータベースに依存する。DBI::Handle
Enumerable
bind_param( param, value, attribs=nil )
paramでバインドするプレースホルダーを指定する。param が文字列の場合はSQL文で使用されたプレースホルダーの名前となる。(例 えば、Oracleの場合は、"SELECT * FROM EMP WHERE ENAME = :ename") paramが整数の場合は、1から始まるプレースホルダーの位置を示す。
valueでプレースホルダーにバインドする値を指定する。
attribsは現在のバージョンでは使用されていない。将来的には、 パラメータの種類などの追加情報をからなるハッシュとして使用される。
execute( *bindvars )
finish
cancel
execute
を実行したあとの結果セットのリソースを解放する。
このメソッドを呼んだ後は、fetchメソッドの実行が無効となる。column_names
Array
を戻す。column_info
DBI::ColumnInfo
オブジェクトからなる配列を戻す。rows
nil
が戻る。fetchable?
fetch
DBI::Row
オブジェクトを戻す。それ以上戻せる行がないときはnil
を戻す。
イテレータとして呼ばれたときは取り出す行がなくなるまでそれぞれの行毎にブロック
を実行する。それぞれの行はDBI::Row
オブジェクトとしてブロックにわたされる。
注意事項: 戻り値のDBI::Row
オブジェクトは単なる参照です。別の場所に結果を
蓄える場合はコピー(dup)したものを用いてください。訳者註:DBI::Row
each {|row| aBlock }
fetch_array
現在の行をArray
として戻す。それ以上行を取得できないときは
nil を戻す。
イテレータとしても呼ぶことができる。
fetch_hash
現在の行をHash
として戻す。それ以上行を取得できないときは
nil を戻す。
イテレータとしても呼ぶことができる。
fetch_many( cnt )
次のcnt個行のArray
を戻す。配列の中身はDBI::Row
オ
ブジェクトからなる。
それ以上戻せる行がないときは、空の配列[]
を戻す。
fetch_all
fetch_scroll( direction, offset=1 )
引数directionには次の定数のうちのひとつを指定する。訳者註
offsetは正か負の数値。(SQL_FETCH_RELATIVE を使用したときのみ)
fetch_scrollはこれ以上の行が使用できない場合、たとえば最後の 行を得た場合でも結果セットの自動的な解放をしない。
DBI::Row
オブジェクトを戻す。オブジェクトを戻せない場合はnil
を戻す。
注意事項: 戻り値のDBI::Row
オブジェクトは単なる参照です。別の場所に結果を
蓄える場合はコピー(dup)したものを用いてください。訳者註:DBI::Row
[attr]
[attr] = val
引数の属性attrを設定または取得する。
訳者註: 指定できる属性はデータベースドライバに依存する。
fetchの戻り値、また、ブロックパラメータのDBI::Row
オブジェ
クトは内部の値が変えられた上で毎回同じオブジェクトがわたされる。
例:
sth = dbh.execute("SELECT * FROM emp") row1 = sth.fetch() ... row1を参照すると、1行目の結果が取得できる。... row2 = sth.fetch() ... row2を参照すると、2行目の結果が取得できる。... ... しかしここで row1 を参照すると、1行目の結果ではなくて、2行目の結果を得る。...
これは row1, row2 は同じオブジェクトを指しており、fetch によって その内部状態が変更されるためである。
以前に fetch した値を保存したいときは、以下のように row1 のコピーを取っておく。
sth = dbh.execute("SELECT * FROM emp") row1 = sth.fetch() ... row1を参照すると、1行目の結果が取得できる。... row1 = row1.dup # 次の fetch で値が変わらないようにする。 row2 = sth.fetch() ... row2を参照すると、2行目の結果が取得できる。... ... ここで row1 を参照すると、コピーをとっておいたので1行目の結果を得る。...
NotSupportedError
例外となる。