db.select 查询
问题:
怎样执行数据库查询?
解决方案:
如果是0.3版本, 连接部分大致如下:
db = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')
当获取数据库连接后, 可以这样执行查询数据库:
# Select all entries from table 'mytable'
entries = db.select('mytable')
select方法有下面几个参数:
- vars
- what
- where
- order
- group
- limit
- offset
- _test
vars
vars变量用来填充查询条件. 如:
myvar = dict(name="Bob")
results = db.select('mytable', myvar, where="name = $name")
what
what是标明需要查询的列名, 默认是*, 但是你可以标明需要查询哪些列.
results = db.select('mytable', what="id,name")
where
where查询条件, 如:
results = db.select('mytable', where="id>100")
order
排序方式:
results = db.select('mytable', order="post_date DESC")
group
按group组排列.
results = db.select('mytable', group="color")
limit
从多行中返回limit查询.
results = db.select('mytable', limit=10)
offset
偏移量, 从第几行开始.
results = db.select('mytable', offset=10)
_test
查看运行时执行的SQL语句:
results = db.select('mytable', offset=10, _test=True)
<sql: 'SELECT * FROM mytable OFFSET 10'>
query返回值是一个iterbetter对象,这个对象是一个迭代器,但不像列表,它内部维护着一个指向当前元素的指针,这个指针只会往后走。也就是说我调用了一次res[0],下次就必须调用res[1],再访问res[0]就会抛出错误。
所以我们可以简单地将这个值转换成一个列表,之后就方便多了:
1 |
res = list(db.query("SELECT * FROM `log` WHERE `sort` = $i AND `keyword` = $search", vars = { |
2 |
'i': 100, |
3 |
'search': 'test' |
4 |
})) |
这个列表就是sql语句执行结果,len(res)就是行数,列表中的元素是字典,字典的键是列名,字典的值是列值。