PythonとPsycopgを用いて、PostgreSQLのCOPYコマンドを実行する方法について説明します。この記事は、Python 2.7.10とPostgreSQL 9.4を使用しています。
まず、必要なライブラリであるPsycopgをインストールします。インストールはPIPコマンドでも可能です。
次に、以下のサンプルソースコードを参考にしてください。
import psycopg2
try:
# PostgreSQLへ接続
conn = psycopg2.connect("dbname='データベース名' user='ログインユーザ名' host='ホスト名' password='****'")
cur = conn.cursor()
conn.set_isolation_level(0)
#データベースに投入するファイルの読み込み
f = open('/ファイルパス/ファイル名', mode='r', encoding='utf-8')
#文字コードを明示するとCOPY時のエラーが抑制出来ます。
#COPYの実行
cur.copy_from(f, 'テーブル名', sep='\\t', null='\\\\N',columns=('カラム名1','カラム名2'))
# sep='デリミッタ文字種:例ではTAB記号'
# null='ヌル文字種:例ではNULL'
#\u3000\u3000columns=('') 入力対象のカラム名を順番に列挙、全カラムに投入を可能な場合は省略可能
conn.commit() #忘れずに!
f.close()
print("OK")
except psycopg2.Error as e:
print("NG Copy error!")
print(e.pgerror)
このコードは、TSV形式のファイルをPostgreSQLに投入します。copy_from
関数の第一引数は、ファイルまたはファイルのようなオブジェクトで、read()
とreadline()
の両方が存在していなければなりません。サンプルコードでは、TSVファイルをopen()
関数で読み込んだ戻り値を渡しています。
以上がPythonとPsycopgを用いて、PostgreSQLのCOPYコマンドを実行する方法になります。この情報が役立つことを願っています。.