mysql输出:
b.query("select * from b where a='" + c + "' limit 1")
result = b.store_result()
d = result.fetch_row(0)
WSGI脚本的底部:
start_response('200 OK', [('content-type', 'text/html')])
return [d]
apache错误:
TypeError: sequence of byte string values expected, value of type tuple found
如果可能的话,我想使用“收益”而不是“返回”。
因为我通常使用“yield”所以如果我想在网上以原始的方式看到mysql输出..
我该怎么办?
答案 0 :(得分:0)
您似乎正在使用兼容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
这样的模板系统可以显着提高读取,写入,维护和扩展能力。