1
aggron 2012-08-02 10:26:09 +08:00 1
返回多条数据时,用连接查询一次性返回结果集比较好吧, users和profile表~
db.select(['users', 'profile'], where="users.id=profile.userID", limit = 10, order='id DESC') |
2
paloalto OP @aggron 多谢解答!
刚才执行时发现报错,是因为后面的order='id DESC'没有指明是用哪个表的id,改为 db.select(['users', 'profile'], where="users.id=profile.userID", limit = 10, order='users.id DESC') 这样就行啦! 另外请问如果数据为空的话,db.select()能像web.listget()或者xxx.get()一样指定一个返回的数值吗?如下: web.listget( db.select('users', vars=dict(username=username), where='username = $username'), 0, {'为空时返回的东西'}) ———— return ids.get('id', False) —— False 也是为空时返回的。 还是说db.select()需要手动去判断返回的值是否为空? |
3
aggron 2012-08-03 11:10:56 +08:00
web.py的db api好像不能指定默认值,
你是指某个字段为空返回默认值吗,从mysql层面是可以用ifnull的 what="users.*, ifnull(avatarPath,'[email protected]')" db.select(['users', 'profile'], what=what, where="users.id=profile.userID", limit = 10, order='users.id DESC') 加入what有个麻烦就是,如果要指定users表中的某个字段默认值,就不能使用通配符*了 what="username,id,nick_name,......", ps:在sql中通常不使用select * from之类的通配符*,需要哪些字段就select 字段名,从这个编程习惯来说,也算个强制约束了。。 |
4
memorybox 2012-08-03 13:13:05 +08:00
@paloalto
web.py的db返回形式是[[{'a':'a'},{'b':'b'},{'c':'c'}...], [...]]这样的,如果没有查到记录,那默认就是[]了,我记得以前是这么用的,现在你可以查查手册。 我以前是用 res = db.select(...).list() try: return res[0]['a'] except: #为空的处理 用ids.get(...)也可以,不知道有没有更好的方法。 ps:因为数据是直接传到模板里,我觉得在模板里也要对数据为空的时候做一下判断。 |
5
parkman 2012-08-09 11:34:53 +08:00
sqlalchemy还是比较好用 在web.py里面import一下import sqlalchemy。
|
6
ipconfiger 2012-08-09 11:51:18 +08:00
sqlalchemy在建了一大堆关联后删数据才叫一个痛苦哦
|