Postgres SQLAlchemy自动增量不起作用

时间:2016-10-27 08:49:38

标签: python postgresql sqlalchemy

我有一个模型类:

class User(PBase):
   __tablename__ = "users"
   id = Column(Integer, primary_key=True)
   name = Column(String, nullable=False, unique=True)

现在根据文档,当类型Integer与primary_key一起使用时,会自动生成一个序列。这是输出表

  id      | integer           | not null default nextval('users_id_seq'::regclass)

如您所见,在修饰符列中生成了默认序列。

但是当我尝试添加第二个用户时,我在主键约束上出现完整性错误。

IntegrityError) duplicate key value violates unique constraint   "users_pkey"
DETAIL:  Key (id)=(1) already exists. 

这里有什么问题?

编辑:添加用户的代码,快照

  def create(name, email, roleid)

       with self._session_context() as session:
           user = User(name, email, roleid)
           session.add(user)
           session.commit()

2 个答案:

答案 0 :(得分:5)

所以,想出来并在这里回答,所以它可以帮助别人。因此,如果您在插入新记录时碰巧提供了id字段,那么使用Postgres时,不会使用表的序列。如果您没有指定id,则在进一步插入时,不使用序列表,因此您有重复。在我的应用程序中,几个记录从JSON文件加载了默认值并为这些记录指定了id,但是对于所有非默认值,在插入期间没有提供id。 This helped me

答案 1 :(得分:1)

可以通过在数据库上发出以下查询来解决此问题。

SELECT setval('users_id_seq', MAX(id)) FROM users;