Python / Django Key已经存在。 Postgres的

时间:2017-01-28 23:57:57

标签: python django postgresql

我有一个用django构建的项目,它使用postgres数据库。 此数据库由CSVs文件填充。因此,当我想插入一个新对象时,我得到了错误“duplicated key”,因为id = 1的对象已经存在。

代码:

user = User(name= "Foo")
user.save()

表用户在id上有PK。

Indexes:
    "users_pkey" PRIMARY KEY, btree (id)

如果我在psql中得到了表的详细信息,我得到了:

Column| Type    |  Modifiers                          
------+-------- +--------------------------------------
id    | integer | not null default nextval('users_id_seq'::regclass)

此外,如果我在创建变量用户后执行 user。 dict 并保存之前,我会得到'id':无 < / p>

如何使用未使用的ID保存用户?

4 个答案:

答案 0 :(得分:6)

您很可能会在CSV设置中明确地插入您的用户id值,当发生这种情况时,postgres序列不会更新,因此当您尝试添加新用户时,序列会生成已使用的值

请查看此其他问题以供参考postgres autoincrement not updated on explicit id inserts

解决方案是该问题的答案所说的,手动更新序列

答案 1 :(得分:1)

您可以通过手动设置users_id_seq来修复它。

SELECT setval('users_id_seq', (SELECT MAX(id) from "users"));

答案 2 :(得分:0)

除非您将名称作为表的主键,否则上述插入应该有效。如果您将名称作为主键,请将其删除并尝试。

答案 3 :(得分:0)

在Postgres SQL中,您可以将id指定为serial,然后将其标记为Primary Key。然后,无论何时插入记录,它都将按顺序排列。 即id serial NOT NULL和 CONSTRAINT primkey PRIMARY KEY(id)。

正如你所说的那样,它是一个预先填充的CSV,所以当你从python代码中插入它时,它会自动进入表的末尾,并且没有重复的值。