• 使用 db.query 执行较为复杂的数据库查询
    • 问题
    • 方案

    使用 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 变量。