2016-07-28 93 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