1

和:

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()

anIntegrityError得到提升(当然)。

有没有办法(a)获取一系列冲突问题(在异常时,而不是新的数据库请求)或(b)告诉 SQLAlchemy 继续前进(在示例中,y, z, a添加了?

(是的,我会在这里和 Postgres 下进行某种类似“设置”的行为,所以如果有其他方法可以实现这一点,我也会全神贯注。)

4

1 回答 1

1

有没有办法(a)得到一系列相互冲突的问题

从来没听说过。

(b) 告诉 SQLAlchemy 继续前进

您可以嵌套将生成保存点的事务。

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

于 2013-01-26T09:30:43.767 回答