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)
~代表逆序,多个字段 排序,用 | 组合
db().select(db.person.name, db.person.dept,distinct=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.name,distinct=True),
结果:allen
pyDAL官方手册说db().select(db.person.name,distinct=True),
也可以这样写db().select(db.person.name,distinct=db.person.name),
那如果我们这样写:
db().select(db.person.name, db.person.dept,distinct=db.person.name)
同时选择name和dept,但是name要distinct,期望的结果是:allen,marketing/????????allen,finance/????????allen,retail 随机一行
测试:db().select(db.person.name, db.person.dept,distinct=db.person.name) 结果报错了,
再试:db().select(db.person.name,distinct=db.person.name),也报错了,
看来,我们需要好好研究下distinct这个东西
(1)我先搞清楚手册上说的:
db().select(db.person.name,distinct=db.person.name)为什么也报错,
原来这跟DAL后端数据库有关,MySQL不支持这样写,其他数据库可以
(2)db().select(db.person.name, db.person.dept,distinct=db.person.name)是不是可以在其他数据库上可行呢?
答案不是,这事儿没这么简单,所有数据库都不能这样使用dictinct;
如何和实现我们预期的效果,这里有篇文章,相深入的同学继续: