2017-12-11 23 views
0

私はCSVファイルを処理してPSQLインスタンス(AZUREでホストされている)に挿入できるように、pg8000をApp Engineフラスコアプリケーションで使用しています。pg8000コピーfrom CSV

なぜpg8000で、psycopg2ではないのですか? - >アプリケーションエンジンはpsycopg2をサポートしていないためです。

これまでのところ、pg8000のドキュメントには、psycopg2のような機能が記載されていません。私はSOやドキュメントを含む他の場所でこれを実現する例は見つけていません。

これが可能かどうかは誰でも知っていますか?

答えて

1

the source codeを見てみると、そこに直接CSVをインポートするための方法であると思われる、またコードが

することが可能となる、INSERTクエリの周りの任意の組み込みのラッパーを持っているように見えるんあなたはオプションを持って行っていません手動CSVリーダーを使用してexecutemanyを使用して:

import csv 
import pg8000 

conn = pg8000.connect(user="postgres", password="C.P.Snow") 
cursor = conn.cursor() 

command = 'INSERT INTO book (title) VALUES (%s), (%s) RETURNING id, title' 
with open('my-data.csv', 'rb') as fl: 
    data = list(csv.reader(fl)) 
    conn.executemany(command, data) 

注意の言葉として、あなたのデータのサイズに応じて、isliceを使用する方が良い場合があります。

with open('my-data.csv', 'rb') as fl: 
    reader = csv.reader(fl) 
    slice = itertool.islice(reader, 100) 
    while slice: 
     conn.executemany(command, slice) 
     slice = itertool.islice(reader, 100) 
+0

これは正常に動作しますが、次のエラースロー: 'ProgrammingError:(u'ERROR 'u'ERROR'、u'42601' は、u'INSERTが表現よりも多くのターゲット列を持っている、u'79' を、u'analyze.c '、u'884'、u'transformInsertRow ') '、これで私を助けることができますか?列の1つはautoincrementであり、insert文で指定されていません。 – codeninja

+0

これはSQLエラーです。まず、SQLを動作させてから、 'executemany'にプラグインしてください。 – cwallenpoole

+0

固定!しかし、処理には時間がかかります。挿入する代わりに、コピーコマンドを使用することはできませんか? – codeninja

0

別の質問hereで提案されているように、csvファイルにロジックを適用する前とcsv readメソッドを使用する前に、nextメソッドを使用できます。

前回の回答の補足として挿入していないのは、申し訳ありませんが、十分なポイントがありません。

私は同じ問題を抱えています。私は以下の方法で問題を解決しました。私にとって、多くを実行する正しい方法は、connではなく、cursorオブジェクトであることに注意してください。

conn = pg8000.connect(user='username', password='password', host='host', port=5432, database='database name') 
cursor = conn.cursor() 

command = "INSERT INTO public.salesforce_accounts (field1, field2, field3, field4, field5, field6) VALUES (%s, %s, %s, %s, %s, %s)" 
with open('test.csv', 'r') as file: 
    next(file) 
    data = list(csv.reader(file)) 
    cursor.executemany(command, data)