查询多个连接sqlalchemy

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询多个连接sqlalchemy相关的知识,希望对你有一定的参考价值。

我正在逐步生成一个带有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'
答案

我用这种方式解决了,只是在之前的连接中调用了.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)

以上是关于查询多个连接sqlalchemy的主要内容,如果未能解决你的问题,请参考以下文章

Sqlalchemy 连接超时

如何使用 sqlalchemy 关系实现多个连接

如何在 Sqlalchemy 中正确使用 SQL 连接/子查询

按 sqlalchemy 中的连接别名排序

flask_SQLALchemy之多表查询

flask 中orm关系映射 sqlalchemy的查询