0

私は、部分ごとにSQLアルケミーを使用して照会を生成しています。複数の結合を照会するsqlalchemy

**私は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) 

私が知っているドントは、私が生成することができますどのように、取得し、連結などの2以上がselect_from句で使用することをするために参加します。何か案が?私はちょうど参加以前に.join invoquingだけ使用して、この方法で解決

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' 
+0

厳密にあなたは、主キーなしのORMモデルを持つことはできません彼らは本物かないことを話します。あなたはコアを使っているようです。 –

+0

はい、ORMにプライマリキーがありますが、正しくマップされていません –

+0

@IljaEveriläが問題を修正しました。あなたはコアを使っているようですね。 –

答えて

0

:事前に

どうもありがとう:)

は、最終的な結果はからで、このようにする必要があります右のテーブル。メソッドの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) 
関連する問題