
| ■ | DBモジュールとカラム情報 |
""" ********************************************************
カーソルで実行したSQL文のカラム情報を標準出力に出力します。
パラメータ:
cur ... SELECT文をexecute()で実行した直後の状態のカーソル
戻り値:
なし。
""" ********************************************************
def listdesc(cur):
seq = cur.description
for col in seq:
(name, type_code, display_size, internal_size,
precision, scale, null_ok) = col
print "%-10s %-10s %2d %2d %2d %2d %d" % \
(name, type_code, display_size, internal_size,\
precision, scale, null_ok)
""" kinterbasdbの例:
COL1 <type 'string'> 30 30 0 0 1
COL2 <type 'long int'> 17 8 12 -2 1
"""
# end.
|
.description属性は、各々が7つの要素からなる配列が、 さらにカラムの数だけ並んだ配列です。 7の要素は例の通り、カラム名、データ型、表示用のサイズ、 内部用のサイズ、有効桁数、小数点以下の桁数、NULL可否 (1…可、0…否)で、カラム名とデータ型が必須、残りは DBモジュールに依存するオプションです。 内部用のサイズは特に役立つケースはないでしょう。 表示用のサイズはテキスト整形したりするときに使うのかな。 (私は特に利点が分かりませんが) 有効桁数、小数点以下の桁数の表記方法は、DBモジュールによって異なります。 ここで試したkinterbasdb(Interbase/FirebirdのDBモジュール) では、文字列型のカラムでは両方とも0、 数値型(INTEGER、SMALLINT、DECIMAL、NUMERIC、FLOAT、DOUBLE PRECISION) では、有効桁数はそのままデータ定義時の桁数、 小数点以下の桁数は負の整数で返されます。
以下は、そのモジュールを使ってカラム情報を表示するスクリプトの例です。
from ColumnInfoLister import listdesc import kinterbasdb con = kinterbasdb.connect(dsn="localhost:c:/usr/dbms/fb/udb.gdb", user="urano", password="urano399", charset="SJIS") # カーソルの作成。SELECT文のWHERE句はダミーで可 cur = con.cursor() sql = "SELECT * FROM DWH_ORDERS WHERE ORDER_NUM = 'dummy'" cur.execute(sql) listdesc(cur) cur.close() con.close() # end. |
セクションのサブメニューに戻る
(first uploaded 2003/02/16 last updated (not ever))