我々はすべて知っているように、Pythonは通常cx_Oracleにこのパッケージを使用してOracleデータベースに接続します。
キーはcx_Oracleこのパッケージである。しかし、返される結果は、タプルやリストです。
次のコードのように:
1つの インポートcx_Oracle 2 インポートOS 3 4はos.environ [ ' NLS_LANG ' ] = ' 簡体CHINESE_CHINA.UTF8 ' 5 6接続= cx_Oracle.connect(" ブッカー"、" 123456 "、" 172.18.240.31:1521/Book " ) 7 8 =カーソルconnection.cursor() 9(cursor.execute " 本SELECT * FROM " ) 10 11 =cursor.fetchall() 12 用の C で: 13 プリント(C) 14 15 cursor.close() 16 connection.close()
次のように結果を返します。
(' PHP '、 ' 積極的に黄色'、' エイリアンの出版社'、' 34 ')
これはタプルです。辞書形式のフィールド名が含まれているに戻ることができません。
:公式ドキュメントのcx_Oracleチェックアウトhttps://oracle.github.io/python-cx_Oracle/を
しかし、適切な方法を見つけることができませんでした。
私は強迫性障害を持っている、そのような人にとって、これは容認できません。
あなたは他のソリューションを持つことができませんか?ビットを探して、カーソルがプロパティの説明を持っていた、どのような結果を確認するためにフィールドの説明、印刷です。
印刷(cursor.description)
それは次のようになります。
[(' BOOK_NAME '、< クラス ' cx_Oracle.STRING ' >、300、900、なし、なし、1),,(' 著者'、< クラス ' cx_Oracle.STRING ' >、300、900、なし、なし、1 )、(' 公共'、< クラス ' cx_Oracle.STRING ' >、300、900、なし、なし、1)、(' 価格'、< クラス ' cx_Oracle.STRING ' >、300、900、なし、なし、1 )]
リストがあり、各フィールドはタプルで、タプルの最初の要素はフィールド名です。これは、取り扱いが容易です。
用 D でcursor.description: プリント(D)
出力:
(' BOOK_NAME '、< クラス ' cx_Oracle.STRING ' >、20、60 、なし、なし、0) (' 著者'、< クラス ' cx_Oracle.DATETIME ' >、23、なし、なし、なし、1 ) (' パブリック '< クラス ' cx_Oracle.STRING ' >、20、60、なし、なし、1 ) (' 価格 '< クラス ' cx_Oracle.STRING " >、300、900、なし、なし、1)
ああ、右、各要素はタプルで、我々は[0]フィールド名dで取り出しできます。
用 D でcursor.description: プリント(D [0])
出力:
BOOK_NAME
著者
公共の
価格
そうすれば、私たちは、フィールド名を取り出し、forループを使用することができます。この文以下、最初の要素を削除し、リストを形成し、cursor.descriptionサイクルです。
COLS = [D [0] のための D でcursor.description] プリント(COLS)
出力:
[ ' BOOK_NAME '、' 著者'、' パブリック'、' 価格' ]
だから、どのようにしてクエリ結果は辞書、それにまとめますか?ああ、ジップ関数の使用。
ZIP()関数は、パラメータイテラブル、タプルにパックオブジェクトの対応する要素として使用され、これらの組のオブジェクトを返しています。
ジップ()関数の構文:
ジップ(iterable1、iterable2、...)
パラメータ:
- 反復可能 - 1回以上の繰り返しオブジェクト(文字列、リスト、タプル、辞書)
はい、文字列、リスト、タプル、辞書は反復可能です。
ジッパールックのようなジップ機能は、2つの要素が反復可能オブジェクトを対応しています。一貫性のない様々なイテラブルの要素の数は、そのオブジェクトが返されたオブジェクトの最短の長さと同じである場合は、反復してもよいです。
次のコードは、辞書のフィールド名を使用し、その結果を形成することができます。
1つの インポートcx_Oracle 2 インポートOS 3 4はos.environ [ ' NLS_LANG ' ] = ' 簡体CHINESE_CHINA.UTF8 ' 5 6接続= cx_Oracle.connect(" ブッカー"、" 123456 "、" 172.18.240.31:1521/Book " ) 7カーソル= connection.cursor()cursor.execute(" 本SELECT * FROM " ) 8 A = cursor.fetchall() 9つの COLS = [D [0] のためにD でcursor.description] 10 プリント(COLS) 11 のための行に: 12 B = dictの(ZIP(COLS、行)) 13 プリント([B ' BOOK_NAME ' ]) 14 cursor.close() 15 connection.close( )
出力:
PHP
私たちは、さまざまな操作にB [「フィールド名」]の方法を使用することができるように、明確かつ便利。