Pythonで直接Postgres COPYを再作成しますか? 質問する

Pythonで直接Postgres COPYを再作成しますか? 質問する

私はデータのブロックを持っています。現在は n タプルのリストですが、形式はかなり柔軟で、これを Postgres テーブルに追加したいと考えています。この場合、各 n タプルは DB の行に対応します。

これまで私がやってきたことは、これらすべてを CSV ファイルに書き込んでから、Postgres の COPY を使用してこれらすべてをデータベースに一括ロードすることでした。これは機能しますが、最適ではありません。すべてを Python から直接実行できるようにしたいです。Python 内で Postgres の COPY タイプの一括ロードを複製する方法はありますか?

ベストアンサー1

psycopg2 ドライバーを使用している場合、カーソルは、任意のファイルのようなオブジェクト (バッファを含む) から読み取ることができる関数をcopy_to提供します。copy_fromStringIO

ファイルには例があります例/copy_from.pyそして例/copy_to.py付属のpsycopg2 ソース配布

この抜粋は次のcopy_from.py例からのものです:

conn = psycopg2.connect(DSN)
curs = conn.cursor()
curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")

# anything can be used as a file if it has .read() and .readline() methods
data = StringIO.StringIO()
data.write('\n'.join(['Tom\tJenkins\t37',
                  'Madonna\t\N\t45',
                  'Federico\tDi Gregorio\t\N']))
data.seek(0)

curs.copy_from(data, 'test_copy')

おすすめ記事