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_VERSIONVERSIONSQL_FETCH_NEXTSQL_FETCH_PRIORSQL_FETCH_FIRSTSQL_FETCH_LASTSQL_FETCH_ABSOLUTEStatementHandle#fetch_scroll用の定数SQL_BITSQL_TINYINTSQL_SMALLINTSQL_INTEGERSQL_BIGINTSQL_FLOATSQL_REALSQL_DOUBLESQL_NUMERICSQL_DECIMALSQL_CHARSQL_VARCHARSQL_LONGVARCHARSQL_DATESQL_TIMESQL_TIMESTAMPSQL_BINARYSQL_VARBINARYSQL_LONGVARBINARYSQL_OTHER例外クラスは Python 2.0 の API から「拝借」した。
Warning < RuntimeErrorError < RuntimeErrorInterfaceError < ErrorNotImplementedError < InterfaceErrorDatabaseError < Errorデータベースに関係するエラー用の例外
err, errstr, state の3つの属性をもつ。
DataError < DatabaseErrorOperationalError < DatabaseErrorIntegrityError < DatabaseErrorInternalError < DatabaseErrorProgrammingError < DatabaseErrorNotSupportedError < DatabaseErrorDBI.connect( driver_url, user=nil, auth=nil, params=nil )driver_urlによって指定されるデータベースへ接続する。例えば、 "dbi:Oracle:oracle.neumann"など。
DBI::DatabaseHandleオブジェクトを戻す。コードブロック付きで
呼ばれたときは、新規のDBI::DatabaseHandleをパラメータとして
ブロックを実行し、ブロックの終了時に自動的にdisconnectが呼ばれる。
(ブロック内でユーザにより切断されなかった場合)
DBI.available_driversArrayを返す。
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::Handleconnected?trueを戻す。
さもなくばfalseを戻す。disconnectprepare( 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
tablescolumns( table )DBI::ColumnInfoオブジェクトの配列を戻す。ping接続が生きているならばtrueを戻す。さもなくばfalseを戻す。
connected?とは異なり、pingテストはSQLを実行するなどして 接続が生きているかどうか確認する。
quote( value )commitrollbacktransaction {|database_handle| aBlock}[attr][attr] = valtrueもしくは
falseを設定できる。指定できる属性はデータベースに依存する。DBI::HandleEnumerablebind_param( param, value, attribs=nil )paramでバインドするプレースホルダーを指定する。param が文字列の場合はSQL文で使用されたプレースホルダーの名前となる。(例 えば、Oracleの場合は、"SELECT * FROM EMP WHERE ENAME = :ename") paramが整数の場合は、1から始まるプレースホルダーの位置を示す。
valueでプレースホルダーにバインドする値を指定する。
attribsは現在のバージョンでは使用されていない。将来的には、 パラメータの種類などの追加情報をからなるハッシュとして使用される。
execute( *bindvars )finishcancelexecuteを実行したあとの結果セットのリソースを解放する。
このメソッドを呼んだ後は、fetchメソッドの実行が無効となる。column_namesArrayを戻す。column_infoDBI::ColumnInfoオブジェクトからなる配列を戻す。rowsnilが戻る。fetchable?fetchDBI::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_allfetch_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例外となる。