从SQLAlchemy中的IntegrityError中恢复

时间:2013-01-25 19:28:06

标签: postgresql sqlalchemy flask-sqlalchemy

使用:

class X(Base):
  __tablename__ = 'x'
  id = Column(Integer, primary_key=True)
  ys = relationship("Y")

class Y(Base):
  __tablename__ = 'y'
  id = Column(Integer, primary_key=True)
  data = Column(String, unique=True)
  x_id = Column(Integer, ForeignKey('x.id'), nullable=False)

如果我这样做:

# x is instance of X
x.ys #=> ["x"]
x.ys.extend(["x", "y", "z", "a"])
session.save()

IntegrityError被提升(当然)。

是否有任何方法可以(a)获取一系列冲突问题(在异常时,不是使用新的DB请求)或(b)告诉SQLAlchemy继续(在示例中,有{{ 1}}添加?

(是的,我会在这里和Postgres下进行某种类似“行为”的行为,所以如果还有其他方法可以达到这个目的,那我也很感动。)

1 个答案:

答案 0 :(得分:1)

  

有没有办法(a)获得一系列冲突问题

不是我知道的。

  

(b)告诉SQLAlchemy继续

您可nest transactions生成保存点。

您是否考虑过使用relationship("Y", collection_class=set)?我知道在并行执行的上下文中不会消除错误的可能性,但在事务中它会使事情变得更容易。