2009年09月25日
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に出力してみましょう。
あれから(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}
⊆ ランキングに参加してみました!応援お願いします ⊇
【蛇の最新記事】
この記事へのコメント