我遇到了我的主键序列与我的表行不同步的问题.
也就是说,当我插入一个新行时,我得到一个重复的键错误,因为串行数据类型中隐含的序列返回一个已经存在的数字.
这似乎是由导入/恢复不能正确维护序列引起的.
我有一个模型类:
class User(PBase):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False, unique=True)
Run Code Online (Sandbox Code Playgroud)
现在根据文档,当类型Integer与primary_key一起使用时,会自动生成一个序列.这是输出表
id | integer | not null default nextval('users_id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)
如您所见,在修饰符列中生成默认序列.
但是当我尝试添加第二个用户时,我在主键约束上得到完整性错误.
IntegrityError) duplicate key value violates unique constraint "users_pkey"
DETAIL: Key (id)=(1) already exists.
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
编辑:添加用户的代码,快照
def create(name, email, roleid)
with self._session_context() as session:
user = User(name, email, roleid)
session.add(user)
session.commit()
Run Code Online (Sandbox Code Playgroud)