psycopg2期望PostgreSQL中的串行列的数据

时间:2019-02-19 13:33:41

标签: python postgresql psycopg2

我正在使用 copy_from 将数据复制到Postgresql中的表中。但是它正在尝试将数据插入到串行列中(或者抱怨列末尾没有数据)

我在postgresql中创建了一个表,如下所示:

CREATE TABLE userdata (
    userid int4 null,
    activity varchar null,
    "time" timestamp null,
    id serial not null,
    primary key (id)
    );

我有一个数据框,其中包含“用户ID”,“活动”,“时间”列 当我尝试将其复制到表中时,出现错误:

  

“ psycopg2.DataError:缺少列” id“的数据

我希望此列填充默认值,我可以在该列的属性中看到将其正确设置为nextval('userdata_id_seq'::regclass)

我用于插入数据的代码:

output = io.StringIO()
df.to_csv(output, sep='|', index=False, header=False)

connection = engine.raw_connection()
cursor = connection.cursor()
output.seek(0)
cursor.copy_from(output, table, sep='|', null='')
connection.commit()
cursor.close()
connection.close()

我在代码中缺少某些设置吗?

1 个答案:

答案 0 :(得分:0)

正如上面 shmee 在评论和文档中所指出的,
https://www.psycopg.org/docs/cursor.html
如果在 pycopg2 copy_from 语句中指定了列,则:
cur.copy_from(f, 'test', columns=('num', 'data'))
....但不要指定序列列,然后它会自动递增。