使用web.py简单显示SQL查询结果的方法
我正在使用 web.py 创建一些结果集,方法是通过
web.database.query()
然后我想把查询结果显示在一个 HTML 模板上。
请问 web.py 有没有内置的功能可以做到这一点?我在文档和代码示例中没有找到相关内容。
如果有其他模块可以把 SQL 结果集转换成可以被 jQuery 或 Google 数据网格显示的格式,我也非常感激。我开始做一个 Google 数据网格的转换器,但在处理各种数据类型时遇到了一些麻烦。我想这应该有很多人做过,我只是想知道我应该去哪里找相关的信息。
1 个回答
2
可以查看 web.py 自带的模板系统文档。还有一些 食谱示例,可以帮助你使用第三方模板引擎,比如 Mako、Cheetah 和 Jinja2。
如果你想把数据转换成 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>