查询多个连接sqlalchemy

时间:2017-12-20 15:29:42

标签: python postgresql sqlalchemy flask-sqlalchemy postgresql-9.1

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

**我有一个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'

1 个答案:

答案 0 :(得分: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)