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

Python 确保SQLAlchemy不会重复使用数字ID,python,sqlalchemy,Python,Sqlalchemy,我目前正在使用SQLAlchemy在SQLite上进行测试,但也需要它在其他地方工作,并且我对主键ID的重用有问题 例如,如果我有一些ID为1-6的内容,然后删除ID为4的内容,我仍然希望添加的下一个内容的ID为7,而不是当前的4。 会话重置后是否可以重用ID,这两种方式都无关紧要 我猜这取决于您正在使用的数据库类型以及它的自动增量策略/实现,但我需要一种方法使其在至少SQLite、mySQL和PostgreSQL中工作。其他方法并不重要,但它们也不会造成伤害 任何帮助或指向正确方向都将不胜感激

我目前正在使用SQLAlchemy在SQLite上进行测试,但也需要它在其他地方工作,并且我对主键ID的重用有问题

例如,如果我有一些ID为1-6的内容,然后删除ID为4的内容,我仍然希望添加的下一个内容的ID为7,而不是当前的4。 会话重置后是否可以重用ID,这两种方式都无关紧要

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


任何帮助或指向正确方向都将不胜感激

这是RDBMS特有的特性,而不是SQLAlchemy需要关注的东西

通常,数据库将使用单调递增的ids新值,该值高于前面的值,通常为+1,但也可以使用更大的步长

这里唯一真正的例外是SQLite;它将为您提供当前使用的最高值加1。这意味着,如果从表中删除MAXid,则该id可能会在将来的行插入中重用。看。请注意,您在帖子中声称的行为实际上从未发生过;要么选择MAXrowid+1,要么从sqlite_序列中选择seq+1,其中name=;而是使用

通过为表设置sqlite_autoincrement=True,可以切换到正确的自动增量,在这种情况下,值永远不会被重用。看


如果您计划将Oracle用作后端,还需要将其添加到需要自动递增的列。

正如您正确指出的,这本身并不依赖于SA,而是特定于RMDB。然而,据我所知,默认情况下,自动增量相关策略的默认行为不会重用释放的标识符。为什么你的问题会提出相反的建议?任何示例?SQLite通常不会仍然使用ID 7,即使在删除ID为4的行时也是如此。但是,如果要删除示例中ID最高的行so ID 6,那么是的,它将重用该值。