我在问题中找到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
但是因为我将两列映射到同一个表,所以很困惑。
有谁知道实现这个目标的正确方法?
答案 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)
})