2016-07-28 6 views
1

Postgresqlに、行識別用のIDカラム(シリアル)を持ち、プライマリキーである既存のテーブルがあります。 ID列を含まないCSVをインポートするスクリプトがあります。プライマリキーを持たないCSVを既存のテーブルにインポート

file_list = glob.glob(path) 

for f in file_list: 
    if os.stat(f).st_size != 0: 
     filename = os.path.basename(f) 
     arc_csv = arc_path + filename 

     data = pandas.read_csv(f, index_col = 0) 
     ind = data.apply(lambda x: not pandas.isnull(x.values).any(),axis=1) 
     data[ind].to_csv(arc_csv) 
     cursor.execute("COPY table FROM %s WITH CSV HEADER DELIMITER ','",(arc_csv,)) 
     conn.commit() 
     os.remove(f) 
    else: 
     os.remove(f) 

をスクリプトでCSVを存在しないため、それをテーブルのid(P_KEY)列が存在してCSVをインポートすることはできませんので、私は私が考えることができる2つのオプションがあります。ここで私が使用しているコードがあります: 1インポートの前にid列を削除し、インポート後に追加するコマンドを発行するか、 2 my cursor.executeコマンドでid列を増やす方法を見つけます。

私の質問は、どのアプローチが良いのか、それについてのよい方法であるか(もちろん誰かが良いアイデアを持っています)ありがとう。

+0

はパンダがそこに何をやっていますか?あなたのCSVのサンプル行を投稿する – e4c5

+0

既にPythonを使用しているので、csvデータの行を繰り返して個別に挿入するだけで、 'COPY FROM'の制限について心配する必要はありません。 – larsks

答えて

1

COPYコマンドには、挿入する列が含まれています。あなたは、列リストにPKをスキップする必要があります。COPYテーブル(COL1、COL2、...)

COPY documentation

+0

DOH!それを元にしようとしていて、それがうまくいかなかったために何かをねじっていると思っていました。私は私の名義の大学にすべてのことを悩ませました。スクリプトとテーブルを統一しました。今は問題ありません。ありがとう! – Jeff

関連する問題