?rows = db(db.person.dept == 'marketing').select(db.person.id, db.person.name, db.person.dept)
?rows = db(db.person.dept == 'marketing').select()
?rows = db(db.person.dept == 'marketing').select(db.person.ALL)
?rows = db().select(db.person.ALL) / db(db.person).select()等于 select * from person
Rows(或者称为一个set)是个数据集,不是一条数据记录,可以用'标号'去访问其中一个记录,传统SQL也需要游标去访问各个记录
record = rows[0]
我们通常使用for循环变量rows数据集
for? record? in? rows:??????????????????????????
????? .....
访问到具体字段值有3种方法:
方法1:
record0_name = record.name
方法2:
record0_name = record ['name']
方法3:
record0_name = record ['person.name']
多表连接查询得到的数据集,必须采用方式3,需要同时给定出明确的 “表名+字段名”,
相关内容后续会详细说明:
first() 、 last()方法用于rows查询结果中获取第一个和最后一个数据记录
record_first?= rows.first()
record_last = rows.last()
db(db.person.id == '001').select() 用主键直接查,我们知道结果虽然只有一个数据,但是数据结构上,他还是个rows数据集,我们可以这样:
record = db(db.person.id == '001').select().first()
我们这样写些行吗?
record = db(db.person.id == '001').select()[0]
(这样写稍微有些问题,因为如果查询结果为空就会 抛出异常报错)
(1)AND逻辑
rows = db((db.person.dept == 'marketing') & (db.person.name == 'allen' ) ).select()
(2)OR逻辑
rows = db((db.person.dept == 'marketing') | (db.person.dept == 'finance') ).select()
(3)混合逻辑组合(注意括号)
rows = db(?(db.person.name == 'allen' ) &
????????????????? ? ?((db.person.dept == 'marketing')?| (db.person.dept == 'finance'))? ?).select()
rows = db( ((db.person.name == 'allen') | (db.person.name == 'lily') )&
? ? ? ? ? ? ? ? ? ? (?(db.person.dept == 'marketing') | (db.person.dept == 'finance') )? ).select()