アフィリエイト広告を利用しています

広告

posted by fanblog
http://赤ヘル.comに引っ越しました。

python オラクル接続とexcel操作

pythonで挫折したExcelファイル自動作成ですが、
あれから(python excel操作の限界参照)書式のコピーをもがいてみましたが
結局出来なかったので、VBAで作ってしまいましたw
初めてVBAもやってみましたが、Oracleへの接続も簡単にできますし
当たり前ですがExcelの操作も簡単に行えますねw

というわけで目的が無くなってしまったたので、
pythonで「Oracleに接続しExcelに出力」を勉強してみます。

まず、pythonでOracleへ接続するにはcx-oracleというモジュールを使用します。
というわけで、ここから自分の環境に合ったバージョンをダウンロードしてきます。

それとOracleが無ければインストールしましょう。
会員登録が必要ですが、Oracle XE(10g)が無料でダウンロードできます。
ここ⇒http://www.oracle.com/index.html

ただOracle XEには1点問題があり
デフォルトのインスタンスの文字セット(CHARACTER SET)がUTF-8になってしまうんですね。。
(全角が2byteではなく3byteになってしまいます。)
通常通り2byteで開発したいのでShift_JISに変更しましょう。

ですが・・・厄介な事に文字セットの変更は行えず
Shift_JISベースのDBを再構築しないといけないんです。
(これは後ほど書けたら書きます。)
まぁ全角が3byteというだけなので、日本語なんか使うか!って人には関係ないですw

さて、cx-oracleとOracle環境が整ったら、準備完了です。
早速TESTというテーブルからselect⇒結果をExcelに出力してみましょう。





# -*- coding: utf-8 -*- 
import xlwt # Excel書き込みモジュール
import cx_Oracle # Oracle接続モジュール

wb = xlwt.Workbook() # 新規ワークブック作成
ws = wb.add_sheet('Test Sheet') # 新規ワークシート作成

con = cx_Oracle.connect('user/pass@接続文字') # Oracle接続
ora = con.cursor() # カーソルオープン

vSql = str('SELECT * FROM TEST ') # TESTテーブルよりデータ取得
ora.execute(vSql) # SQL実行
row = ora.fetchone() # 1行目取得

nRow = 0

while row != None: # データがあれば
nLine = 0
for value in row: # 取得要素分ループ
ws.write(nRow, nLine, value) # Excelに書き込み
nLine = nLine + 1
nRow = nRow + 1
row = ora.fetchone() # 次レコードへ

ora.close() # カーソルクローズ
con.close() # Oracle切断

wb.save("DB_to_Excel.xls") # Excelファイル保存



こんな感じですね。
私はPL/SQLをかじっているのですが、ほぼ同じですね。
違いと言えば、次レコードへの処理がnextではなく、
再度 row = ora.fetchone() を呼び出す箇所くらいでしょうか。
ちょっと次レコードの呼び方に苦労しました・・・

さて次は何をしようか。。
※ソースは勉強中のものなので、ツッコミあれば歓迎です。


{a8.net http://books.livedoor.com/item/3160409}{a8.net http://books.livedoor.com/item/3222406}{a8.net http://books.livedoor.com/item/3247473}

⊆ ランキングに参加してみました!応援お願いします ⊇
にほんブログ村 野球ブログ 広島東洋カープへブログランキング 人気ブログランキングへ

この記事へのコメント

   
プロフィール

carper
電子タバコ「Simple Smoker(シンプルスモーカー)」 スターターキット 本体+カートリッジ30本セット 公認不正検査士とは FXで儲けたいならココ!
~Thanks Link~
https://fanblogs.jp/carpython/index1_0.rdf
×

この広告は30日以上新しい記事の更新がないブログに表示されております。