2016-07-28 97 views
1

我在Postgresql中有一個現有表,它具有用於行標識的ID列(串行)並且是主鍵。我有一個腳本來導入CSV,它不包含id列。下面是我使用的代碼:將主鍵無主鍵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) 

的腳本不能存在於表中的ID(p_key的值)列導入CSV,由於它不存在的CSV,所以我有兩個選擇,我能想到的: 1-在導入之前發出命令以刪除id列並在導入之後將其添加回來,或者通過我的cursor.execute命令查找增加id列的方法。

我的問題是哪種方法更好,並且是一個好方法(或者當然有人有更好的主意!)?謝謝。

+0

什麼在那裏在做熊貓嗎?發佈CSV示範行示例表結構 – e4c5

+0

由於您已經在使用Python,因此您可以自己迭代csv數據行並單獨插入它們,而不必擔心'COPY FROM'的限制。 – larsks

回答

1

COPY命令包含要插入的列。您必須在列列表跳過PK:COPY表(COL1,COL2,......)

COPY documentation

+0

DOH!原本是在嘗試,並認爲我搞砸了,因爲它不起作用。意識到我把我的命名學院全部搞砸了。在腳本和表格中統一製作。現在沒問題。謝謝! – Jeff