pyDAL一个python的ORM(9) pyDAL的嵌套查询

假设有以下两个表:

db.define_table('person',Field('id', 'string'), Field(‘name', 'string'), Field(‘dept', 'string'))

db.define_table('things',Field('id', 'string'), Field(‘name', 'string'), Field(‘owner', 'string'))

一、使用belongs进行嵌套查询

我们查询要求:things表中属于marketing部门的东西:

前边我们已经提到,belongs还可以用作嵌套查询

rows = db(db.things.owner.belongs(db(db.person.dept == 'marketing')._select(db.person.name))).select()

红色部分就是一个嵌套,嵌套的select前记得加一个下划线_,

二、更清晰的书写规则

为了嵌套的条件更清晰,我们也可以这样书写,把嵌套单独拧出来写

owers = db(db.person.dept == 'marketing')._select(db.person.name)

rows = db(db.things.owner.belongs(owers)).select()

三、多重嵌套

当然有多个表时,可以多嵌套,假如还有一个表,

db.define_table('vendor',Field('id', 'string'), Field(‘name', 'string'), Field(‘sku', 'string'))

我们要查询marketing部门人员的东西的生产商:

owers = db(db.person.dept == 'marketing')._select(db.person.name)

things = db(db.things.owner.belongs(owers))._select(db.things.name)

vendors = db(db.vendor.sku.belongs(things)).select()

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值