在SQLAlchemy插入中自动递增Oracle序列

1 投票
1 回答
2163 浏览
提问于 2025-04-18 13:50

我有一个表,里面有以下的列:

id = sa.Column(sa.Integer, sa.Sequence('id_seq'), primary_key=True, nullable=False)

通常情况下,我插入数据没有问题,但每次我插入特定id的行时,就会在Oracle中出现问题,因为序列没有相应地更新。

举个例子,假设这个表是新的,序列从1开始,如果我插入一行指定id=2,序列就不会改变,这样下次插入就会失败。

我明白Oracle不支持自动增长,但在使用sqlalchemy时,应该怎么正确处理这个问题呢?我需要在这样的插入语句后手动更改序列吗?我能否绑定一个事件或者使用其他方法,让它像其他数据库那样工作?(比如选择max(id)+1)

1 个回答

-2

我不太了解sqlalchemy,但我会创建一个Oracle序列和一个“插入前触发器”,用来把id设置为序列的下一个值。

我的语法有点生疏,但大致上是这样的:

create sequence myautonum start with 1 nomaxvalue nocycle;

create or replace trigger mybeforetrigger
before insert on <tablename>
for each row
begin
if (new.id is NULL) then
  new.id=myautonum.nextval;
endif
end;

就像我说的,我的语法可能有点不太对,但我想你明白我的意思。

撰写回答