pyDAL一个python的ORM(5) pyDAL查询orderby, distinct

文章讨论了在PythonDAL中使用orderby进行排序和distinct进行字段去重的功能,特别提到MySQL对distinct配合复杂表达式的限制。作者还探讨了如何在其他数据库上实现预期的字段选择去重效果,推荐进一步阅读相关SQL教程。
摘要由CSDN通过智能技术生成

1、orderby

db(db.person.dept == 'marketing').select(db.person.ALL,orderby=db.person.name)

db()select(db.person.ALL, orderby= db.person.dept | ~ db.person.name)

~代表逆序,多个字段 排序,用 | 组合

2、distinct

db().select(db.person.name, db.person.deptdistinct=True)

示例数据:

id

name

dept

1

allen

marketing

2

allen

finance

3

allen

retail

当select多字段时,distinct是所有字段合起来重复,上述查询结果为:

allen, marketing

allen, finance

allen, retail

如果我们只选择name一个字段

db().select(db.person.namedistinct=True),

结果:allen

3、拓展

pyDAL官方手册说db().select(db.person.namedistinct=True),

也可以这样写db().select(db.person.namedistinct=db.person.name)

那如果我们这样写:

db().select(db.person.name, db.person.deptdistinct=db.person.name)

同时选择namedept,但是namedistinct,期望的结果是:allen,marketing/        allen,finance/        allen,retail 随机一行

测试:db().select(db.person.name, db.person.deptdistinct=db.person.name) 结果报错了,

再试:db().select(db.person.namedistinct=db.person.name),也报错了,

看来,我们需要好好研究下distinct这个东西

1)我先搞清楚手册上说的:

db().select(db.person.namedistinct=db.person.name)为什么也报错

原来这跟DAL后端数据库有关,MySQL不支持这样写,其他数据库可以

2db().select(db.person.name, db.person.deptdistinct=db.person.name)是不是可以在其他数据库上可行呢

答案不是,这事儿没这么简单,所有数据库都不能这样使用dictinct

如何和实现我们预期的效果,这里有篇文章,相深入的同学继续:

《sql只根据某一字段去重,并保留其他字段》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值