应用alembic迁移后表序列id不递增

2024-05-23 21:59:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用alembic迁移时遇到了一个奇怪的问题。我用博士后作为数据库。在

我已经编写了一个alembic修订版,其中我在表中插入了一些数据(在迁移之前,表中已经有一些数据)。在

问题是迁移运行成功并将数据插入表中。但是在这之后,当我调用一个api并试图插入一个新行时,我遇到了一些错误,因为table seq_id没有递增。在

ERROR:__name__:Failed to create a duplicate entry: (psycopg2.IntegrityError) duplicate key value violates unique constraint "user_pkey"
DETAIL:  Key (id)=(9) already exists.
 [SQL: 'INSERT INTO user (id, name, age, number) VALUES (%(id)s, %(name)s, %(age)s, %(number)s) RETURNING id'] [parameters: {'number': None, 'id': 9, 'name': 'something', 'age': 12}]

举个例子:

我有表“User”,已经有10行了,现在使用alembic迁移,我插入了两行,所以现在有12行。理想情况下,它也应该更新sequence_id,但是seq_id仍然是10。在

不使用我正在插入的更多行的api,它将尝试在id 11处添加,并将给出上述错误。如果我再尝试这个api两次,它就会成功,因为它每次都会增加seq_id。在

只有在应用了alembic迁移之后,才会发生这种情况,否则就可以正常工作了。在

有人能告诉我我做错了什么吗?我错过了配置吗?为什么应用迁移时序列id不递增?在

提前谢谢!在


Tags: 数据nameapiid数据库numberage错误
1条回答
网友
1楼 · 发布于 2024-05-23 21:59:47

经过所有的研究和阅读,我发现在postgres中它维护了一个单独的表来保存sequence_id,不像在mysql中它在表中处理的那样。在

因此,当您在python中应用迁移或fixture时,需要在所有插入操作之后增加或重置seq_id值。在

像这样-

op.execute(‘’'
       SELECT setval(‘“user_id_seq”‘, (SELECT max(“id”) from user));
   ‘’')

相关问题 更多 >