生成的查询包含多余的产品?

时间:2015-03-07 12:29:49

标签: python sqlalchemy

我有这样简单的模型:

TableA2TableB = Table('TableA2TableB', Base.metadata,
                        Column('tablea_id', BigInteger, ForeignKey('TableA.id')),
                        Column('tableb_id', Integer, ForeignKey('TableB.id')))


class TableA(Base):
    __tablename__ = 'TableA'
    id = Column(BigInteger, primary_key=True)
    infohash = Column(String, unique=True)
    url = Column(String)
    tablebs = relationship('TableB', secondary=TableA2TableB, backref='tableas')


class TableB(Base):
    __tablename__ = 'TableB'
    id = Column(Integer, primary_key=True)
    url = Column(String, unique=True)

然而,sqla会生成类似

的查询
SELECT "TableB".id, "TableB".url AS "TableB_url" FROM "TableB", "TableA2TableB" 
WHERE "TableA2TableB".tableb_id = "TableB".id AND "TableA2TableB".tablea_id = 408997;

但是,当选择的属性是TableB中的属性时,为什么查询中会出现笛卡尔积?不应该TableA2TableB

由于

1 个答案:

答案 0 :(得分:0)

就像现在一样,TableB(tableas)中存在一个backref关系并加载它,因为默认加载模式设置为select。

您可能希望将TableA.tablebs更改为

tablebs = relationship('TableB', secondary=TableA2TableB, backref='tableas', lazy="dynamic")