pymssql.Cursor.executemany 插入数据报"Violation of PRIMARY KEY constraint"该如何处理?

horizon668 2018-11-27 01:11:06
就一张表tb1,表中有6列,为了防止数据重复录入,我把6列都设置了主键
因为用execute一条条的来,太慢了,2200个文件,总共才270万不到的数据,用了接近3个小时。
尝试用executemany,但在运行是报错'''IntegrityError: (2627, b"Violation of PRIMARY KEY constraint 'PK_lgn'. Cannot insert duplicate key in object 'lgn'.DB-
Lib error message 20018, severity 14:\nGeneral SQL Server error: Check messages from the SQL Server\n")'''

1、我知道是由于主键设置,数据重复所致。请问,怎么能忽略掉错误,把不重复的数据插入进去呢?

2、另外我发现查询这张表时速度很慢,是否跟主键设置过多有关系?怎么优化这张表(在防止数据重复录入的前提下),谢谢各位
...全文
1399 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
horizon668 2018-12-03
  • 打赏
  • 举报
回复
最后的方案是:改用sqlite,用pandas读取新增数据和原始数据比对去重后,将增量数据插入sqlite。光插入耗时,270万条数据1分钟不到。
尘封记忆 2018-11-28
  • 打赏
  • 举报
回复
引用 3 楼 horizon668 的回复:
新的增量数据我能确定不重复,但怎么保证跟数据库里的存量数据也不重复呢,两者有重复的话
把数据库的数据读取到内存。
horizon668 2018-11-27
  • 打赏
  • 举报
回复
新的增量数据我能确定不重复,但怎么保证跟数据库里的存量数据也不重复呢,两者有重复的话
尘封记忆 2018-11-27
  • 打赏
  • 举报
回复
我对 sql 不是很熟悉,但是原理应该和mongo差不多。你最好把数据读取到内存,然后对每条信息和内存的数据主键先比对,不一样后,再插入输入,这样会比较快。 比对 ---->一样删除/不一样留下 ---->不一样加入数据库
尘封记忆 2018-11-27
  • 打赏
  • 举报
回复
https://bbs.csdn.net/topics/392363056

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧