与backref的ManyToMany关系的InvalidRequestError

时间:2017-07-25 21:09:00

标签: python sqlalchemy

我对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正试图插入数据库?

0 个答案:

没有答案