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

发布于 2024-11-08 11:34:22 字数 293 浏览 4 评论 0原文

我使用 web.py 创建了一些结果集,

web.database.query()

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

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

我也很感激任何指向其他模块的指针,这些模块会将 sql 结果集强制转换为可以由 jquery 或 google 数据网格显示的内容。我开始研究谷歌数据网格转换器,但我必须跳过一些环节来处理各种数据类型。我想这之前已经做过很多次了——我只是想知道我应该在哪里寻找。

Using web.py, I'm creating a handful of result sets by using

web.database.query()

And I'd like to display the query results on an html template.

Does web.py have any built-in facility for doing this? I didn't see any going through the doc and code samples.

I'd also appreciate any pointers to other modules that will coerce the sql result set into something that can be displayed by a jquery or google data grid. I started working on a google data grid converter but I had to jump through some hoops to handle the various datatypes. I figure this has been done tons of times before - I'd just like to know where I should be looking.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彼岸花似海 2024-11-15 11:34:22

查看 web.py 的内置模板系统的文档。还有用于挂钩第 3 方模板引擎的说明书示例,例如 hookbook 示例。 org/cookbook/template_mako" rel="nofollow">Mako、猎豹Jinja2

为了转换要由 Javascript 显示的数据,您可以使用 Python 的 JSON 模块之一:标准 json 模块 (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>

Check out the docs for web.py's built-in templating system. There are also cookbook examples for hooking in 3rd party template engines like Mako, Cheetah and Jinja2.

In order to convert the data to be displayed by Javascript you could use one of the JSON modules for Python: the standard json module (2.6+), simplejson, or python-cjson.

Here is a quick example of using the web.template module to render a simple HTML page showing some database query results.

Updated The select method doesn't return the column names as a separate attribute. It returns an iterator where each row is a dictionary. Therefore, to get the column headers you need to grab then from the first row. I've updated the example to show how this can be done:

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()

Output (collapsed to save space):

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文