如何使用sqlalchemy查询多对多关系中的重复对象?

时间:2016-10-15 19:48:07

标签: python sqlite flask sqlalchemy flask-sqlalchemy

我有以下多对多关系:

foos_bars = Table('foos_bars', db.metadata,
                  Column('foo_id', Integer, ForeignKey('foos_table.id')),
                  Column('bar_id', Integer, ForeignKey('bars_table.id')))


class Foo(db.Model):
    __tablename__ = 'foos_table'
    id = db.Column(db.Integer, primary_key=True)
    desc = db.Column(db.String(16), nullable=False)
    bars = db.relationship('Bar', secondary=foos_bars, back_populates='foos')


class Bar(db.Model):
    __tablename__ = 'bars_table'
    id = db.Column(db.Integer, primary_key=True)
    desc = db.Column(db.String(16), nullable=False)
    foos = db.relationship('Foo', secondary=foos_bars, back_populates='bars')

在db中,我有以下内容:

foos_bars:

foo_id | bar_id
-------+-------
 1     | 1
 2     | 1
 2     | 1
 3     | 2
 3     | 4

(实质上,我有2< - > 1两次)

如果我运行原始SQL查询,如:

SELECT * from foos_bars WHERE foo_id = 2

我得到两条记录(我想要的)。

然而,在sqlalchemy:

Foo.query(id=2).first().bars

是一个只包含一个元素的列表。我希望它包含Bar[1]两次。有没有办法做到这一点?

Foo[3]这不会发生,我得到两个项目,正如我所期望的那样(区别在于Foo [3]只有关联的一方重复)。

0 个答案:

没有答案