看起来您正在使用与 Python DB-API 兼容的驱动程序。要获得最佳答案,您应该真正包括您正在使用的库和数据库驱动程序。
无论哪种方式,您当前都有一个不安全的操作,对于某种未转义的 SQL 注入漏洞利用已经成熟。
首先将您的查询更改为:
b.query("select * from b where a=%s limit 1", c)
result = b.store_result()
WSGI 只需要返回 str() 对象,而您返回的是值元组。你要回来text/html
了,所以你可能想做这样的事情:
def csvify(row):
return ",".join([str(col) for col in row])
start_response('200 OK', [('content-type', 'text/html')])
return ["<html><body><pre>"] + [ csvify(row) for row in results ] + ["</pre></body></html>"]
如果您想使用 yield,只需创建并返回一个生成器而不是列表。
def csvify(row):
return ",".join([str(col) for col in row])
def my_response_generator(results):
yield "<html><body><pre>"
for row in results:
yield csvify(row)
"</pre></body></html>"
start_response('200 OK', [('content-type', 'text/html')])
return my_response_generator(result)
我强烈建议不要手动生成自己的 HTML 和 WSGI 响应,而是使用一个简单的框架flask
来抽象出很多样板。像这样的模板系统jinja
可以显着提高阅读、编写、维护和扩展的能力。