栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在SQLAlchemy / Flask中联接多个表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在SQLAlchemy / Flask中联接多个表

以下将在一个查询中为你提供所需的对象:

q = (session.query(Group, Member, Item, Version)        .join(Member)        .join(Item)        .join(Version)        .filter(Version.name == my_version)        .order_by(Group.number)        .order_by(Member.number)        ).all()print_tree(q)

但是,你得到的结果将是元组列表

(Group, Member, Item, Version)
。现在由你决定以树形形式显示它。下面的代码可能被证明是有用的:

def print_tree(rows):    def get_level_diff(row1, row2):        """ Returns tuple: (from, to) of different item positions.  """        if row1 is None: # first row handling return (0, len(row2))        assert len(row1) == len(row2)        for col in range(len(row1)): if row1[col] != row2[col]:     return (col, len(row2))        assert False, "should not have duplicates"    prev_row = None    for row in rows:        level = get_level_diff(prev_row, row)        for l in range(*level): print 2 * l * " ", row[l] prev_row = row

Update-1:如果你愿意放弃

lazy = 'dynamic'
前两个关系,则可以执行查询以
object network
使用以下代码加载整个对象(与上述元组相对):

q = (session.query(Group)        .join(Member)        .join(Item)        .join(Version)        # @note: here we are tricking sqlalchemy to think that we loaded all these relationships,        # even though we filter them out by version. Please use this only to get data and display,        # but not to continue working with it as if it were a regular UnitOfWork        .options( contains_eager(Group.member). contains_eager(Member.items). contains_eager(Item.version) )        .filter(Version.name == my_version)        .order_by(Group.number)        .order_by(Member.number)        ).all()# print tree: easy navigation of relationshipsfor g in q:    print "", g    for m in g.member:        print 2 * " ", m        for i in m.items: print 4 * " ", i


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/381126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号