我有以下多对多关系:
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]只有关联的一方重复)。