加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django Import-Export导入重复键值违反了错误

发布时间:2020-12-20 13:20:13 所属栏目:Python 来源:网络整理
导读:我正在使用Django 1.10,Python 3.6和PostgreSQL作为数据库后端的项目,其中我有一个名为’Article’的模型,我需要从CSV文件导入数据.我已成功导入我的第一个CSV文件以下字段: id,link类别 它的ID字段从1到1960开始 然后在下一个文件中,我从1961年开始向ID字
我正在使用Django 1.10,Python 3.6和PostgreSQL作为数据库后端的项目,其中我有一个名为’Article’的模型,我需要从CSV文件导入数据.我已成功导入我的第一个CSV文件以下字段:
id,link&类别
它的ID字段从1到1960开始
然后在下一个文件中,我从1961年开始向ID字段开始,但它显示以下错误:

Line number: 1961 – duplicate key value violates unique constraint “article_article_pkey” DETAIL: Key (id)=(1961) already exists.

即使我在Django管理员中看到我的文章模型,它也会显示从1960年开始的ID

这是我的models.py:

class Article(models.Model):
   id = models.AutoField(primary_key=True)
   link = models.URLField(max_length=255)
   category = models.CharField(max_length=255,choices=Categories)

这是admin.py

@admin.register(Article)
    class ArticleAdmin(ImportExportModelAdmin):
    resource_class = views.ArticleResource
    readonly_fields = ('id',)

解决方法

我已经触发了问题:
实际上,问题是PostgreSQL主键顺序,它不与表行同步.
这就是为什么当我插入一个新行时,我得到一个重复的键错误,因为串行数据类型中隐含的序列返回一个已经存在的数字.

要解决这个问题,我们必须重置PostgreSQL的ID顺序,
这是一步一步的指南:

>登录数据库外壳并连接到您的数据库
>首先,检查表的id列的最大值为SELECT MAX(id)FROM your_table;
>然后,检查ID的下一个值是什么:SELECT nextval(‘your_table_id_seq’);
>如果nextval是下一个Max值,那么它是正确的.例如MAX = 10& NEXTVAL = 11
>否则,将表的id_seq重置为:

开始;

– 更新计数器时防止并发插入

LOCK TABLE your_table IN EXCLUSIVE MODE;

– 更新序列

SELECT setval(‘your_table_id_seq’,COALESCE((SELECT MAX(id)1 FROM your_table),1),false);

承诺;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读