如何将第三个表连接到两个联合表的结果中?

2024-09-29 23:14:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python程序来读取需要满足的列的名称和类型。你知道吗

我想这样放置结果:

id_index=Column(int)

使用打印

print "{0}{1}=Column({2})".format(" "*5,SysColumns.name,SysTypes.xtype)

我将使用三个表:SysColumnsSysObjectsSysTypes

class SysColumns(BaseModel):
     __tablename__ = "SysColumns"
     name=Column(String,primary_key=True)
     colorder=Column(Integer,primary_key=True)
     id=Column(Integer,primary_key=True)
     xtype = Column(String, primary_key=True) 

class SysObjects(BaseModel):
     __tablename__ = "SysObjects"
     name=Column(String)
     id=Column(Integer,primary_key=True)
     xtype=Column(String,primary_key=True)

class SysTypes(BaseModel):
    __tablename__ = "SysTypes"
    name = Column(String, primary_key=True)
    xtype = Column(String)

SysColumnsSysObjects中具有相同的列id,而SysTypesSysColumns中具有相同的列xtype。你知道吗

原始代码如下:

def dispMod(session,tableName):
    result=session.query(SysColumns). \
        join(SysObjects,SysColumns.id==SysObjects.id).\
            filter(SysObjects.xtype=='u').\
            filter(SysObjects.name==tableName).\
            order_by(SysColumns.colorder)

    for sysColumns in result:
        print "{0}{1}=Column({2})".format(" "*5,SysColumns.name,SysColumns.xtype)

结果可以显示为:

id_index=Column(56)

现在我需要在SysTypes中搜索数字56,将其改为它所代表的类型。你知道吗

SysTypesSysTypes.xtypeSysTypes.name列。 我想让它显示名称而不是xtype

print "{0}{1}=Column({2})".format(" "*5,SysColumns.name,Systypes.name)

我不知道如何使用上面的结果加入Systypes表来查找其中的名称。你知道吗

我可以编写查询来搜索SysColumns.nameSysTypes.name一次吗?你知道吗


Tags: keyname名称idtrueformatstringcolumn
1条回答
网友
1楼 · 发布于 2024-09-29 23:14:59

只需在另一个连接之后添加连接并仅选择名称:

session.query(SysColumns.name, SysTypes.name).\
    join(SysObjects, SysColumns.id == SysObjects.id).\
    join(SysTypes, SysTypes.xtype == SysColumns.xtype).\
    filter(SysObjects.xtype == 'u').\
    filter(SysObjects.name == tableName).\
    order_by(SysColumns.colorder)

相关问题 更多 >

    热门问题