使用 db.query 执行较为复杂的数据库查询

问题

您要执行的 SQL 语句如:高级的联接或计数。

方案

webpy 没有尝试在数据库之上建立一层模型,而是以尽可能简单的方式查询数据库,做复杂的查询也很容易。例如:

  1. import web
  2. db = web.database(dbn='postgres', db='mydata', user='dbuser', pw='')
  3. # Query number of entries in `users` table
  4. results = db.query("SELECT COUNT(*) AS total_users FROM users")
  5. # Print the result
  6. print(results[0].total_users)

或者是,使用一个JOIN示例:

  1. results = db.query("SELECT * FROM entries JOIN users WHERE entries.author_id = users.id")

为了防止 SQL 注入攻击,db.query 也支持 db.select 一节介绍的 vars 参数:

  1. results = db.query("SELECT * FROM users WHERE id=$id", vars={'id':10})

这将避免用户输入,如果你信任这个 id 变量。