查询多个连接sqlalchemy

问题描述 投票:0回答:1

我正在逐步生成一个带有sql炼金术的查询。我有这个对象只适用于只有一个连接的查询:

**我有一个ORM模型,但我不能使用设置的主键因为不是真的。

q = select( self.selectObj._select
    ).select_from(
        self.joinObj._join
    ).where(
        and_(*self.whereObj._where)
    ).group_by(
        *self.selectObj._groupby
    ).order_by(
        self.selectObj._orderby
    ).limit(
        self.selectObj._limit
    ).having(
        self.selectObj._having
)

我有这个方法来生成连接:

def get_joins(self, first, leftTable, rightTable, leftTableColumn, rightTableColumn, outer):
    if first:
        self._join = join(leftTable, rightTable, leftTableColumn == rightTableColumn, full=outer)
        first = False
    else:
        self._join = self._join + join(leftTable, rightTable, leftTableColumn == rightTableColumn, full=outer)

我不知道,如何在select_from子句中生成,连接,获取等两个或多个连接。任何的想法?

非常感谢提前:)

最终结果应该是这样的:

SELECT a.dev, b.asha, c.unk
FROM a 
    FULL OUTER JOIN b ON a.dev = b.devicb 
    FULL OUTER JOIN c ON a.dev = c.devicc
WHERE 
    a.cust = 'SNTC' AND
    b.cust = 'SNTC' AND
    c.cust = 'SNTC' AND
    a.invent = '10' AND
    b.invent = '10' AND
    c.invent = '10'
python postgresql sqlalchemy flask-sqlalchemy postgresql-9.1
1个回答
1
投票

我用这种方式解决了,只是在之前的连接中调用了.join,但只使用了正确的表。 self._join.join(rightTable,...)

该方法的完整解决方案:

def get_joins(self, first, leftTable, rightTable, leftTableColumn, rightTableColumn, outer):
    if first:
        self._join = join(leftTable, rightTable, leftTableColumn == rightTableColumn, full=outer)
        first = False
    else:
        self._join = self._join.join(rightTable, leftTableColumn == rightTableColumn, full=outer)
© www.soinside.com 2019 - 2024. All rights reserved.