在SQLAlchemy插入中自动递增Oracle序列
我有一个表,里面有以下的列:
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;
就像我说的,我的语法可能有点不太对,但我想你明白我的意思。