将没有主键的CSV导入现有表

时间:2016-07-28 21:14:28

标签: python postgresql csv import

我在Postgresql中有一个现有的表,它有一个用于行标识的id列(serial),并且是主键。我有一个导入CSV的脚本,它不包含id列。这是我正在使用的代码:

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,因此我有两个可以想到的选项: 1-发出命令以在导入之前删除id列,并在导入后将其添加回来,或者 2-找到一种通过cursor.execute命令增加id列的方法。

我的问题是哪种方法更好,是一种很好的方法(当然有人有更好的想法!)?感谢。

1 个答案:

答案 0 :(得分:1)

COPY命令包含要插入的列。您必须在列列表中跳过PK:COPY表(col1,col2,...)

COPY documentation