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

2024-01-02 18:18:57

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只根据某一字段去重,并保留其他字段》

文章来源:https://blog.csdn.net/u010018782/article/details/135344212
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。