gpt4 book ai didi

python - 确保 SQLAlchemy 不会重复使用数字 ID

转载 作者:行者123 更新时间:2023-11-30 23:30:28 25 4
gpt4 key购买 nike

我正在使用 SQLAlchemy(目前正在 SQLite 上进行测试,但也需要它在其他地方工作),并且我在重用主键 ID 时遇到问题。

例如,如果我有一些 ID 为 1-6 的内容,然后删除 ID 为 4 的内容,我仍然希望添加的下一个内容的 ID 为 7 而不是 4(当前发生的情况) )。 session 重置后,ID 可以重复使用(也可以不重复使用,这两种方式都无关紧要)。

我猜测这取决于您正在使用的数据库类型(并且它是自动增量策略/实现),但我需要一种方法来让它至少在 SQLite、mySQL 和 PostgreSQL 中工作(其他不是不重要,但它们也不会伤害)。

任何帮助或指出正确的方向将不胜感激!

最佳答案

这是 RDBMS 特定的功能,SQLAlchemy 不需要关心它。

通常数据库将使用单调递增的 id(新值高于之前的值,通常+1,但也可以采用更大的步长)。

这里唯一真正的异常(exception)是 SQLite;它将为您提供当前使用的最高值加一。这意味着如果您删除 MAX(id)如果从表中获取该 id,则该 id 很可能会在将来的行插入中重用。请参阅SQLite autoincrement documentation 。请注意,您在帖子中声称的行为实际上从未发生过;要么 MAX(rowid) + 1被选中,或 SELECT seq + 1 FROM sqlite_sequence WHERE name=<tablename>;而是使用。

您可以通过设置 sqlite_autoincrement=True 切换到正确的自动增量(其中值永远不会重复使用)一张 table 。请参阅specific dialect documentation .

如果您计划使用 Oracle 作为后端,您还需要explicitly add a Sequence() 到需要自动递增的列。

关于python - 确保 SQLAlchemy 不会重复使用数字 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com