【问题标题】:Query multiple joins sqlalchemy查询多个连接 sqlalchemy
【发布时间】:2017-12-20 15:29:41
【问题描述】:

我正在使用 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 子句中使用它。有什么想法吗?

提前非常感谢:)

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'

【问题讨论】:

  • 严格来说,你不能拥有没有主键的 ORM 模型,无论它们是否真实。看来您正在使用核心。
  • 是的,我在 ORM 中有主键,但映射不正确
  • @IljaEverilä 纠正了这个问题,抱歉。你是什​​么意思看起来你正在使用核心。?
  • select()join() 等是 Core 构造。不过,两者并不是分开的,但 ORM 是建立在 Core 之上的。

标签: python postgresql sqlalchemy flask-sqlalchemy postgresql-9.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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2011-08-28
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多