sqlalchemy多表连接查询

查看:103
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆