使用pandas或psycopg使用串行密钥插入数据?

时间:2017-03-28 16:33:46

标签: pandas psycopg2

我有一个简单的维度表,它存储了几个文件中的所有唯一维度。

在postgres中,我做了表:

CREATE TABLE dimension_purpose (
  purpose_key SERIAL PRIMARY KEY,
  purpose text NOT NULL UNIQUE
);

现在我正在尝试有效地将新行添加到此表中。我能够轻松识别新尺寸(使用pandas),但我无法将它们插入此表中。我通常使用

def load_to_database(table_name, file_object, header=True):
    fake_conn = sqlalchemy.create_engine(engine).raw_connection()
    fake_cur = fake_conn.cursor()
    sql = 'COPY {} FROM STDIN WITH CSV HEADER'.format(table_name)
    fake_cur.copy_expert(sql=sql, file=file_object)
    fake_conn.commit()
    fake_cur.close()

如果我尝试批量复制,我会收到错误消息“#39;目的'不是整数(它试图将自己插入到purpose_key字段中)。

将单列数据插入目的字段然后自动更新SERIAL purpose_key的最佳方法是什么?

如果我的df只是一列,我可以使用df.to_sql吗?

1 个答案:

答案 0 :(得分:1)

您可以在COPY命令中指定列,例如

COPY dimension_purpose (purpose) FROM STDIN WITH CSV HEADER

http://www.postgresql.org/docs/current/static/sql-copy.html