我在使用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不递增?在
提前谢谢!在
经过所有的研究和阅读,我发现在postgres中它维护了一个单独的表来保存sequence_id,不像在mysql中它在表中处理的那样。在
因此,当您在python中应用迁移或fixture时,需要在所有插入操作之后增加或重置seq_id值。在
像这样-
相关问题 更多 >
编程相关推荐