- 首先需要把pgsql中的表设置为主键自增
在navicat里尝试将主键设为serial格式报错
经查找资料,需要: - 需要建一个主键自增策略
- 将该自增策略添加到我们表格的主键上
自增策略:
CREATE SEQUENCE "模式名(public)"."自增策略名称"
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 99999999
CACHE 1;
添加:
alter table "模式名"."表名" alter column id set default nextval('自增策略名');
===================================================
自增的从Python导入pgsql
这里使用的copy_from()方法
- 比较快
- 这个方法可以指定列名
注意:今天从另一个博主那里学到了怎么处理copy_from方法传数据时有空值的处理办法。
前段时间用这个方法传数据的时候,遇到日期格式为空总报错
原博客的段落:“copy_from是默认将\N作为NULL值得,但是to_csv会将None值变为“”字符串,因此需要在copy_from中说明null=’’,即空字符串就是代表的NULL” (鼓掌,太感谢了,解决了困扰我很久的问题)
所以最终插入的语句为:
import io
output = io.StringIO()
df.to_csv(output, sep='\t', index=False, header=False) # df为dataframe格式的数据
output1 = output.getvalue()
cur.copy_from(io.StringIO(output1),table_name,null='',columns=list(df.columns))
==================================================
存入成功,id列自增,注意插入数据后删除,id从后面的序号开始自增,如果想要重新从1开始,需要另设置一个自增策略添加到表的主键上面
参考文献:
https://blog.csdn.net/china1987427/article/details/95120023
https://blog.csdn.net/weixin_43343423/article/details/103815206