在sqlalchemy插入中自动增加oracle序列

时间:2014-07-18 13:04:08

标签: python oracle sqlalchemy sequence

我有一个包含以下列的表:

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 个答案:

答案 0 :(得分:-2)

我不知道sqlalchemy,但我会创建一个oracle序列和一个“before insert trigger”,它将id设置为sequence.nextval

我的语法有点生疏但基本上

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;
像我说的那样,我的语法可能有些偏差,但我认为你明白了。