2016-09-09 166 views
1

我正在寫一個Python程序來讀取列的名稱和列的類型需要滿足。如何將第三個表格加入兩個聯合表格的結果中?

我想放置的結果是這樣的:通過使用打印

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

id_index=Column(int) 

我會用三個表: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) 

SysColumns具有相同的列idSysObjects中,而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來改變它的類型是代表。

SysTypes列有SysTypes.xtypeSysTypes.name。 我想讓它顯示我的名字,而不是xtype

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

我不知道如何使用上面的結果加入systypes中表中它找到的名字。

我可以寫查詢來搜索SysColumns.nameSysTypes.name一次嗎?

+0

究竟是什麼,你真正想要實現?看起來你是從你的數據生成代碼,但爲什麼? –

+0

是的,我將在另一個程序中使用數據類型和列名,我不想從數據庫中一個一個複製和粘貼。所以我想從我的數據庫中生成代碼,這將在我的工作中更高效。 – binbeing

+0

但是爲什麼?什麼是最終目標?也許一些現有的工具可能更適合你的任務。 –

回答

0

只需添加其他後加入,只能選擇名稱:

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

這些表格有些奇怪。 SysObject中的xtype與SysType中的不同。但SysColumns中的xtype與Systype中的xtype相同。因此,我應該更改代碼「加入(SysTypes,SysObjects.xtype == SysTypes.xtype)。」到「加入(SysTypes,SysColumns.xtype == SysTypes.xtype)。」? – binbeing

+0

畢竟這是否正確?從閱讀「SysTypes在SysColumns中具有相同的列xtype」我將聯接更改爲「聯接(SysTypes,SysTypes.xtype == SysColumns.xtype)。」。 –

+0

它的工作原理,謝謝! – binbeing

相關問題