【问题标题】:auto increment oracle sequence in sqlalchemy insertsqlalchemy插入中的自动递增oracle序列
【发布时间】:2014-09-09 15:15:33
【问题描述】:

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

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

通常,我插入数据没有问题,但是每次插入具有特定id的行时,都会导致Oracle出现问题,因为没有相应地修改序列。

例如,假设表是新表并且序列从 1 开始,如果我插入指定 id=2 的行,则序列不会改变,这将导致下一次插入失败。

我知道 Oracle 不支持自动增量,但是在 sqlalchemy 下处理这个问题的正确方法是什么?我需要在这样的插入语句之后手动更改顺序吗?我可以绑定到一个事件或使用任何其他魔法使其像其他方言一样工作吗? (选择 max(id)+1)

【问题讨论】:

  • Oracle没有像MySQL那样的“自动增量”,但它有sequence
  • 它在 12c @jcho360...

标签: python oracle sqlalchemy sequence


【解决方案1】:

我不知道 sqlalchemy,但我会创建一个 oracle 序列和一个将 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;

就像我说的那样,我的语法可能有点不对劲,但我想你明白了。

【讨论】:

  • 谢谢,但我确实需要一种用于 sqlalchemy 的方法。另外,我不熟悉确切的语法,但它确实看起来像一个正常的序列替换 - 我认为这个想法是检查 new.id 是否不是 NULL...
猜你喜欢
  • 2021-03-11
  • 2016-06-24
  • 2018-02-05
  • 2019-01-09
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
相关资源
最近更新 更多