我对SQLAlchemy m2m关联有疑问。将backref
添加到relationship
关联后,sqlalchemy会抛出错误。
型号:
assoc = Table('foo_bars_assoc', db.metadata,
Column('foo_id', Integer, ForeignKey('foo.id')),
Column('bar_id', Integer, ForeignKey('bars.id')),
PrimaryKeyConstraint('foo_id', 'bar_id', name='foo_bar_assoc_pk')
)
class Foo(db.Model):
bars = relationship("Bar", secondary="foo_bars_assoc")
class Bar(db.Model):
value = Column(String, unique=True)
我创建了get_or_create
util方法
def get_or_create(**kwargs):
entity = db.session.query(Bar).filter_by(**kwargs).first()
if not entity:
entity = Bar(**kwargs)
self.db.session.add(entity)
self.db.session.commit()
return entity
我们假设所有的栏都已存在:
for i, bar in enumerate(foo.bars):
foo.bars[i] = get_or_create(value=bar.value)
该方法效果很好,直到我添加对m2m关系的后向引用。
错误:
(psycopg2.IntegrityError) duplicate key value violates unique constraint "bar_value_unique"
有谁能解释这里发生的事情?为什么在添加这个backref后,sqlalchemy正试图插入数据库?