【Linux】【Ubuntu18.04】Python3でOracleDBから取得したデータをPostgreSQLに入れる

Python3でOracleDBのデータをそのままPostgreSQLにコピーする必要があったので、やり方をメモ。

1.cx_Oracleをインストール

pipでcx_Oracleのパッケージをインストールします。
このパッケージにてPython3でOracleDBへの接続ができるようになります。

$ python3 -m pip install cx_oracle
Defaulting to user installation because normal site-packages is not writeable
Collecting cx_oracle
Downloading cx_Oracle-8.2.1-cp36-cp36m-manylinux1_x86_64.whl (818 kB)
|????????????????????????????????| 818 kB 153 kB/s
Installing collected packages: cx-oracle
Successfully installed cx-oracle-8.2.1

2.psycopg2をインストール

psycopg2を利用することでPostgreSQLへの接続ができるようになります。
なお、PostgreSQLクライアントのヘッダやライブラリを含んでいるlibpq-dev も必要なので、一緒にインストールする。

$ sudo apt install -y libpq-dev
$ python3 -m pip install psycopg2

3.Pythonプログラム

PythonにてOracleDBの売上テーブルから昨日分のデータを取得し、それをPostgreSQLに格納する、というのを作ります。

PostgreSQLのインサートで失敗した場合、自動でロールバックしてくれる。
コメントの通り、タプル型で取得したデータをそのままINSERTするだけのとてもシンプルな処理になる。
ポスグレのINSERTに関してはexecute_valuesを利用する。なにやらexecuteを利用するより早く処理できるようです。
PostgreSQL - 高速でINSERTしたい君へ - Qiita

基本的に一度接続したコネクションは最後に閉じるようにする。with文で記載するとそこらへんは端折れるので、その方がいいかもしれない。
なお、try文などは省略しています。

Oracleとの接続は、tnsnames.oraで設定する内容と同様のものを定義しておく必要がある。
tnsnames.oraについては以下の記事を参照。
engetu21.hatenablog.com