Translations/OracleAndPython/02-Building on the basics

Last-modified: 2009-05-22 (金) 14:49:09 (3015d)

「最初の第一歩」の次のポスト"Building on basics"を翻訳。

基本で構築


最初のチュートリアルはcx_Oracleを使用してOracleデータベースに接続する方法について説明しただけで、他に有用なものについては説明していなかった。今回はもっと実用的な例を出す。以下のプログラムリストを使って始めよう。それから、新しいパーツを通してやっていくつもりだ。今回解説していない行については「最初の第一歩」でだいたい説明している。
The first tutorial, which showed how to connect to an Oracle database from python using cx_Oracle, did not do anything very useful. This time round we will be looking at a more practical example. Let’s start with the program listing below, and I will go through the new parts. Any lines not covered here are most likely explained in the First things first post.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
import cx_Oracle
 
query = "select * from v$database"
connection_string = "system/systempassword@PYTEST"
 
connection = cx_Oracle.Connection(connection_string)
cursor = cx_Oracle.Cursor(connection)
cursor.execute(query)
 
column_names = cursor.description
 
for row in cursor.fetchall():
  c = 0
  for column in row:
    print str(column_names[c][0]) + ": " + str(column)
    c += 1
 
cursor.close()

次のステップはこのコードの中の新たな項目を見て行くことだ。
The next step is to have a look at what is new in this code.

003 query = “select * from v$database”

まず最初の興味深い行は私達が実行中の新しいクエリだ。このチュートリアル・シリーズはDBAをpythonに導くことを望んでおり、今回のこのクエリはDBAとってそれなりに実用的になるだろう。
The first line of interest is the new query we are running. Seeing as this tutorial series wants to introduce DBAs to python, we now have a query that will be at least vaguely useful to a DBA.

004 connection_string = “system/systempassword@PYTEST”

今回はv$databaseビューを参照する権限を持ったユーザで接続する必要がある。
This time we need to connect as a user with the privilege to select from the v$database view.

010 column_names = cursor.description

cx_Oracleカーソルオブジェクトはselectしたカラムのメタ情報を保持するdescriptionという属性を持っている。この例ではこの属性を使ってカラム名称を抽出する。カラム名称はこのシーケンス内の最初の要素だ。
The cx_Oracle cursor object has an attribute called description which holds MetaData about the columns we are using. In this example we will be extracting the column name using this attribute. The column name is the first item in this sequence.

013   c = 0

カラム番号を保持するように処理するため、一つのシリーズ*1での最初のアイテムを参照するよう0で初期化されたcという変数を定義する。
To keep track of the column number that is currently being processed, we declare a variable called c which is initiated to 0, the first item in a series.

015     print str(column_names[c][0]) + “: ” + str(column)

15行目で2つのものをprintしている。column_names[c][0]ステートメントが各カラムの名称を表示して、それからstr(column)を表示している。注意が必要なのは、カラム名称と結合出来ることを明確にするためにカラム(の値)を文字列としてキャスト*2しているということだ。文字列の結合は + シンボルを使って実現する。
In line 15 we print two things. The column_names[c][0] statement displays the name of every column and then the str(column) part displays the value contained in that column. Note that we are casting the column as a string to make sure that it can be concatenated with the column name. String concatenation is acheived by using the + symbol.

016     c += 1

16行目では次のカラムの番号となるcの値をインクリメントしている。
In lines 16 we increment the value of c to reference the number of the next column.

この単純なプログラムはv$databaseテーブルの全ての値を非常に読み易い形に整形して表示する。そして、一行のテーブルは属性と値のペアのセットで可視化されるということに注目してほしい。
This simple program displays all the values in the v$database table formatted in a very readable way. Also notice that a table with one row is visualised as a set of attribute-value pairs.


*1 一つのシリーズ=要するに取得した一行のこと
*2 キャスト=型変換