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

时间:2011-05-19 02:42:49

标签: python web-frameworks web.py

使用web.py,我使用

创建了一些结果集
web.database.query()

我想在html模板上显示查询结果。

web.py是否有任何内置工具可以执行此操作?我没有看到任何文档和代码示例。

我也很欣赏任何指向其他模块的指针,这些模块会将sql结果集强制转换为可以由jquery或google数据网格显示的内容。我开始研究谷歌数据网格转换器,但我不得不跳过一些箍来处理各种数据类型。我认为这已经完成了很多次 - 我只想知道我应该在哪里看。

1 个答案:

答案 0 :(得分:2)

查看web.py's built-in templating system的文档。还有cookbook examples for hooking in 3rd party template engines MakoCheetahJinja2

为了转换要通过Javascript显示的数据,您可以使用Python的一个JSON模块:the standard json module (2.6+)simplejsonpython-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>