使用web.py简单显示SQL查询结果的方法

1 投票
1 回答
7878 浏览
提问于 2025-04-16 17:55

我正在使用 web.py 创建一些结果集,方法是通过

web.database.query()

然后我想把查询结果显示在一个 HTML 模板上。

请问 web.py 有没有内置的功能可以做到这一点?我在文档和代码示例中没有找到相关内容。

如果有其他模块可以把 SQL 结果集转换成可以被 jQuery 或 Google 数据网格显示的格式,我也非常感激。我开始做一个 Google 数据网格的转换器,但在处理各种数据类型时遇到了一些麻烦。我想这应该有很多人做过,我只是想知道我应该去哪里找相关的信息。

1 个回答

2

可以查看 web.py 自带的模板系统文档。还有一些 食谱示例,可以帮助你使用第三方模板引擎,比如 MakoCheetahJinja2

如果你想把数据转换成 Javascript 可以用的格式,可以使用 Python 的一些 JSON 模块:标准的 json 模块(2.6 及以上版本)simplejson,或者 python-cjson

这里有一个简单的例子,展示如何使用 web.template 模块来渲染一个简单的 HTML 页面,显示一些数据库查询的结果。

更新select 方法不会把列名作为单独的属性返回。它返回的是一个迭代器,每一行都是一个字典。因此,要获取列头,你需要从第一行中提取。这个例子已经更新,展示了如何做到这一点:

import web

TEMPLATE = '''$def with (rows, cols)
<html><body>
<h2>Results:</h2>
<table>
<tr>
$for col in cols:
    <th>$col</th>
</tr>
$for row in rows:
    <tr>
    $for col in cols:
        <td>$row[col]</td>
    </tr>
</table></body></html>'''

class query:
    def GET(self, arg):
        res = db.select('player', what='id,name')
        cols = []
        rows = res.list()
        if rows:
            cols = rows[0].keys()
        return tmpl(rows, cols)

db = web.database(dbn='mysql')
tmpl = web.template.Template(TEMPLATE)
urls = ('/(.*)', 'query')

if __name__ == '__main__':
    app = web.application(urls, globals())
    app.run()

输出(为了节省空间已折叠):

<html><body>
<h2>Results:</h2>
<table>
<tr><th>id</th><th>name</th></tr> 
<tr><td>1</td> <td>Joe</td></tr>
<tr><td>2</td><td>Gary</td></tr>
<tr> <td>3</td><td>Fred</td></tr>
</table></body></html>

撰写回答