目的
Pythonでcx_Oracleを用いてOracleを操作する
環境Python 2.7 または 3.3
1.Oracleクライアントをインストールする。この際、開発者用の環境をつくる。
2.以下からダウンロードしてインストールするか、easy_installする。
cx_Oracle
http://cx-oracle.sourceforge.net/Pythonのコード# -*- coding: cp932 -*-
# cx_Oracleを用いたPythonでのORACLE操作
#1.Oracleクライアントをインストールする。
# この際、開発者用の環境をつくる。
# (おそらく、OCIが必要?)
#
#2.以下からダウンロードしてインストールするか、easy_installする。
# cx_Oracle
# http://cx-oracle.sourceforge.net/
import cx_Oracle
import os
os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE"
try:
tns = cx_Oracle.makedsn("localhost", 1521, "Sample")
conn = cx_Oracle.connect("user", "pass", tns)
cur = conn.cursor()
from_cd = 45
to_cd = 200
cur.execute("""SELECT * FROM T01PREFECTURE
WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
arg1=from_cd,
arg2=to_cd)
rows = cur.fetchall()
for r in rows:
print("%d : %s" % (r[0], r[1]))
print ("===================")
print ("100を消す")
cur.execute("""DELETE FROM T01PREFECTURE WHERE PREF_CD=:arg1""",
arg1=100)
cur.execute("""SELECT * FROM T01PREFECTURE
WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
arg1=from_cd,
arg2=to_cd)
rows = cur.fetchall()
for r in rows:
print("%d : %s" % (r[0], r[1]))
print ("------------------")
print ("100 を追加")
cur.execute("""INSERT INTO T01PREFECTURE
VALUES (:arg1, :arg2)""",
arg1=100,
arg2="あたた")
conn.commit()
cur.execute("""SELECT * FROM T01PREFECTURE
WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
arg1=from_cd,
arg2=to_cd)
rows = cur.fetchall()
for r in rows:
print("%d : %s" % (r[0], r[1]))
print ("===================")
print ("101追加")
cur.execute("""INSERT INTO T01PREFECTURE
VALUES (:arg1, :arg2)""",
arg1=101,
arg2="北斗")
cur.execute("""SELECT * FROM T01PREFECTURE
WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
arg1=from_cd,
arg2=to_cd)
rows = cur.fetchall()
for r in rows:
print("%d : %s" % (r[0], r[1]))
print ("------------------")
print ("ロールバック")
conn.rollback()
cur.execute("""SELECT * FROM T01PREFECTURE
WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
arg1=from_cd,
arg2=to_cd)
rows = cur.fetchall()
for r in rows:
print("%d : %s" % (r[0], r[1]))
except (cx_Oracle.DatabaseError) as ex:
error, = ex.args
print (error.message)
使用感OCI経由でやっているっぽいのでORACLEクライアントをインストールせねばならないのが結構面倒。
接続方法に癖がある。あと文字コードの指定は環境変数で。
ORACLEのPL/SQLはSQLSERVERと違って結果セット返さない。
(配列を返せるが、ここでは面倒なので実験していない)
明示的にCOMMITしないと変更は破棄される。