加入表A到表B中的两列

时间:2012-02-21 14:07:44

标签: dictionary join model sqlalchemy

我在问题中找到answer,但格式错误。

使用SQL Alchemy我想将表A中的列连接到表B中的一列。

表A包含两列位置代码。我可以通过加入表B来检索位置名称,但是如何做到这一点?

到目前为止,我有这个:

locationreq = sa.Table("INMPTL_LOCATION_REQUEST", meta.metadata,
    sa.Column("request_id", sa.types.String(), primary_key=True),
    sa.Column("status", sa.types.String(100)),
    sa.Column("new_loc", sa.types.String(), sa.ForeignKey("INMPTL_LOCATIONS_TBL.inmptl_location_code")),
    sa.Column("previous_loc", sa.types.String(), sa.ForeignKey("INMPTL_LOCATIONS_TBL.inmptl_location_code")),
    autoload=True,
    autoload_with=engine)

locationtable = sa.Table("INMPTL_LOCATIONS_TBL", meta.metadata,
    sa.Column("INMPTL_LOCATION_CODE", sa.types.Integer(), primary_key=True),
    autoload=True,
    autoload_with=engine)

orm.mapper(Location, locationtable )
orm.mapper(LocationRequest, locationreq, extension= wf.WorkflowExtension(), properties = {'location':relation(Location)}

如果这些列中只有一列映射到第二个表,我可以调用以下内容:

model.LocationRequest.location.location_name

但是因为我将两列映射到同一个表,所以很困惑。

有谁知道实现这个目标的正确方法?

1 个答案:

答案 0 :(得分:1)

我打算删除这个问题,但这不是重复的。答案是here(设置主要和次要连接)

orm.mapper(LocationRequest, locationreq, extension= wf.WorkflowExtension(),
    properties={
        "new_location":relation(Location,
        primaryjoin=locationtable.c.inmptl_location_code==locationreq.c.new_loc, lazy = False),
        "previous_location":relation(Location,
        primaryjoin=locationtable.c.inmptl_location_code==locationreq.c.previous_loc, lazy = False)
        })