我正在编写一个python程序来读取列的名称以及需要满足的列的类型。
我想把结果放在这样:
id_index=Column(int)
使用print
print "{0}{1}=Column({2})".format(" "*5,SysColumns.name,SysTypes.xtype)
我将使用三个表:SysColumns
,SysObjects
和SysTypes
:
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
在id
中具有相同的列SysObjects
,而SysTypes
在xtype
中具有相同的列SysColumns
。
原始代码如下:
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.xtype
和SysTypes.name
列。
我希望它显示名称而不是xtype
:
print "{0}{1}=Column({2})".format(" "*5,SysColumns.name,Systypes.name)
我不知道如何使用上面的结果加入Systypes表来查找其中的名称。
我可以编写查询一次搜索SysColumns.name
和SysTypes.name
吗?
答案 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)