在Bottle和MySQLdb中执行Int,Decimal或Datetime类型不起作用

时间:2017-11-25 14:59:48

标签: python mysql bottle pythonanywhere

在PythonAnywhere.com上的Bottle中使用MySQLdb时,我遇到了一个非常奇怪的错误

每当execute包含int,decimal或datetime类型的列时,execute都会抛出500错误。例如,从表,工具,制造商和子类型都是varchars,所以这段代码完美地工作:

reservation_id = request.forms.get("reservation_id")
db = MySQLdb.connect("...")
c = db.cursor()
c.execute("""SELECT manufacturer, sub_type FROM Tool""")
row = c.fetchone()
return row

但要求同一个表中的tool_id,它是int类型,或者来自该表的int,decimal或datetime类型的任何其他列:

reservation_id = request.forms.get("reservation_id")
db = MySQLdb.connect("...")
c = db.cursor()
c.execute("""SELECT tool_id FROM Tool""")
row = c.fetchone()
return row

瓶子抛出一个严重的错误:

运行WSGI应用程序时出错 SystemError:返回错误集

的结果

在MySQL bash中,每个查询都能完美运行。在execute()中放置相同的查询(只有int,decimal或datetime),然后失败。

有没有人有类似的经历?

1 个答案:

答案 0 :(得分:4)

您是否正在返回row作为您的WSGI响应?如果是这样,那就是问题所在。根据{{​​3}}:

  

当服务器调用时,应用程序对象必须返回一个可迭代的,产生零个或多个字符串。

为了说明这一点,请先尝试将您的行转换为字符串并确认这有用。如,

...  # your existing code
return [str(col) for col in row]