Есть две таблицы с одинаковыми port_id. В левой содержится перечень всех юнитов, а в правой - только часть.
Нужно получить список всех юнитов, неважно, есть ли им соответствия в правой таблице.
Пробовала так:
port_util = port_cpop.outerjoin(ta_util, port_cpop.c.id_port == ta_util.c.id_port)
и так:
port_util = outerjoin(port_cpop, ta_util, port_cpop.c.id_port == ta_util.c.id_port)
и так:
port_util = join(port_cpop, ta_util, port_cpop.c.id_port == ta_util.c.id_port, isouter = True)
Ошибку не выдает, но работает как обычный inner join, цепляя из левой таблицы только те строчки, для которых есть соответствие в правой.
Вот тут полностью:
from sqlalchemy.sql.expression import *
from turbogears.database import metadata, mapper
port_cpop = Table('ta_port_cpop', metadata,
Column('port_id', Integer, primary_key=True),
Column('port_name', String(50)),
)
ta_util= Table('ta_port_util', metadata,
Column('port_id', Integer, ForeignKey('port_cpop.port_id'), primary_key=True),
Column('port_util', Integer)),
)
port_util = port_cpop.outerjoin(ta_util, port_cpop.c.id_port == ta_util.c.id_port) #<---- вот тут
class Port(object): pass
mapper(Port, port_util, properties = {
'id_port':[port_cpop.c.id_port, ta_util.c.id_port]
})