sqlalchemy多表连接查询
本文介绍了sqlalchemy多表连接查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
想做一个能够自动读取数据库中字段名称和设置的数据类型的Python程序。
最后的展示形式如下:
print "{0}{1}=Column({2})".format(" "*5,SysColumns.name,SysTypes.xtype)
如:id_index=Column(int)
其中需要用到三张表: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)
# SysTypes是我新加入的表格定义
class SysTypes(BaseModel):
__tablename__ = "SysTypes"
name = Column(String, primary_key=True)
xtype = Column(String)
注意:SysColumns跟SysObjects可以用id连接,Systypes跟SysColumns可以用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表中,读取字段xtype值为56代表的数据类型name是int,最后显示成如下形式。
id_index=Column(int)
现在我不清楚如何将这三个表连接?
我的设想结果是:
print "{0}{1}=Column({2})".format(" "*5,sysColumns.name,Systypes.name)
解决方案
连着继续join就可以了
def dispMod(session,tableName):
// query里放入所需的要查出的所有字段SysColumns.name,Systypes.name
result=session.query(SysColumns.name,Systypes.name). \
join(SysObjects,SysColumns.id==SysObjects.id).\
join(SysTypes, SysObjects.xtype==SysTypes.xtype).\
filter(SysObjects.xtype=='u').\
filter(SysObjects.name==tableName).\
order_by(SysColumns.colorder)
for row in result:
print "{0}{1}=Column({2})".format(" "*5,row[0],row[1])
这篇关于sqlalchemy多表连接查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文