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)就是行数,列表中的元素是字典,字典的键是列名,字典的值是列值。