使用:
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下进行某种类似“行为”的行为,所以如果还有其他方法可以达到这个目的,那我也很感动。)
答案 0 :(得分:1)
有没有办法(a)获得一系列冲突问题
不是我知道的。
(b)告诉SQLAlchemy继续
您可nest transactions生成保存点。
您是否考虑过使用relationship("Y", collection_class=set)
?我知道在并行执行的上下文中不会消除错误的可能性,但在事务中它会使事情变得更容易。