2016-06-16 16 views
0

私はループ内で実行しているpsycopg2にCOPYコマンドを持っています。毎回新しいコピーを実行するのではなく、どうすればCSVに追加することができるのかを知りたかったのです。コピーコマンドpostgresをCSVファイルに追加

コード:事前に

while True: 

    cur.execute("COPY (SELECT id,a,b,c,d from t1,t2 WHERE date>= TIMESTAMP TIMESTAMP %(t)s AND date < TIMESTAMP %(t)s + interval '1h' * t2.frequency) \ 
      TO 'path/to/file.csv' DELIMITER ',' CSV;", d) 

感謝。

+0

あなたは問題のコードのセクションであなたの質問を更新してもらえますか? http://stackoverflow.com/help/mcveおよびhttp://stackoverflow.com/help/how-to-askを参照してください。 –

+0

質問が更新されました。これは、コピーコマンドがループ内で使用されているときにcsvファイルに追加するという、かなり一般的な質問です。 – delalli

+0

私は 'COPY'が追加できることを思い出しません。しかし、すでにPythonを使用しているので、後ですべての出力を1つのファイルにまとめるだけではどうですか? – Nicarus

答えて

2

これは醜いハックです(のみUNIX上で動作)

COPY table_one(id) 
TO PROGRAM 'cat - >/tmp/onetwo.out' 
     ; 

COPY table_two(id) 
TO PROGRAM 'cat - >>/tmp/onetwo.out' 
     ; 
+0

私はこれを試していませんでした。それは何をするためのものか?あなたはそれを説明できますか?私は、ファイル名のパスが/tmp/onetwo.outであることを理解しています。最初の行にsingle>、2行目に>>を持っているのはなぜですか? – delalli

+0

https://www.postgresql.org/docs/9.5/static/sql-copy.html copyコマンドは、ファイルではなくプログラムのstdout/stdinから読み書きできます。 (これはUnixを前提としていますが、まだウィンドウに使用可能なパイプがあるかどうかわかりません) – joop

+0

'> 'はプログラムの出力をファイルにリダイレクトします。 '>>'も使いますが、*がファイルに付加されます。 'cat -'プログラムは単にstdinをstdoutにコピーします。 – joop

関連する問題