我正在使用 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()
我在代码中缺少某些设置吗?
答案 0 :(得分:0)
正如上面 shmee 在评论和文档中所指出的,
https://www.psycopg.org/docs/cursor.html
如果在 pycopg2 copy_from 语句中指定了列,则:
cur.copy_from(f, 'test', columns=('num', 'data'))
....但不要指定序列列,然后它会自动递增。