python - 应用 alembic 迁移后表序列 id 不增加

标签 python postgresql flask alembic

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

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

问题是迁移成功运行并将数据插入表中。但在此之后,当我调用 api 并尝试插入新行时,我收到一些错误,因为表 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 中应用迁移或固定装置时,您需要在所有插入后递增或重置 seq_id 值。

类似这样的东西 -

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

关于python - 应用 alembic 迁移后表序列 id 不增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48717969/

相关文章:

postgresql - 大连接的查询优化

java - org.postgresql.util.PGobject 到 org.postgis.Point;

javascript - 从表中动态创建的下拉菜单中选择值

python - 将 Flask 代码拆分到不同的文件中

python - Pandas 未从 xlsx 文件中读取第一列

python - 导入错误 : cannot import name weave

python - 按顺序用列表中的项目替换字符串中的正则表达式匹配项

python - 在 tensorflow 中重用关闭的 session

python-3.x - Python 中的这个 Postgresql 查询有什么问题?

amazon-web-services - 无法通过来自 Python Elastic Beanstalk 的 Flask SQLAlchemy URI 连接到 AWS MySQL RDS 实例