You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask读取MySQL数据报错:参数未转换完全及SQL语法错误

修复Flask+MySQL柱状图页面的SQL错误

你遇到的两个错误其实都是SQL拼接和参数传递的细节问题,我来一步步帮你解决:

第一个问题:SQL语法错误(1064错误)

看你拼接SQL的代码:

sql = "SELECT cast(sum(Number_employees) as signed) FROM tbldata"
sql += "WHERE year = (%s) GROUP BY year, month ORDER BY year, month ASC"

当你拼接这两行的时候,最终的SQL会变成:

SELECT cast(sum(Number_employees) as signed) FROM tbldataWHERE year = (2011) GROUP BY jaar, maand ORDER BY jaar, month ASC

注意tbldata和WHERE之间没有空格,MySQL会把tbldataWHERE当成一个不存在的表名,直接触发语法错误。

修复方法:在第二行的WHERE前面加一个空格:

sql += " WHERE year = (%s) GROUP BY year, month ORDER BY year, month ASC"

第二个问题:参数格式化错误(not all arguments converted)

这个错误通常是因为传递给SQL的参数格式不对。如果你的get_data函数是使用MySQL的驱动(比如pymysql)执行查询,那么参数需要以元组的形式传递,哪怕只有一个参数。

比如你原来的调用是get_data(sql, year),如果year是单个整数,驱动会把它当成一个字符串序列(比如把2011当成['2','0','1','1']),导致参数不匹配。

修复方法:把参数改成元组形式,加个逗号:

data_part = optimize_list(get_data(sql, (year,)))

另外,注意到你错误信息里出现了Nulber_employees(拼写错误,少了个'm'),检查一下代码里的字段名是否和数据库里的一致,确保是Number_employees,避免字段不存在的错误。

修正后的完整代码

@app.route("/grafiek")
def chart():
    data = []
    years = optimize_list(get_data("SELECT DISTINCT year FROM tbldata"))
    print(years)
    # 修复SQL拼接的空格问题
    sql = "SELECT cast(sum(Number_employees) as signed) FROM tbldata"
    sql += " WHERE year = (%s) GROUP BY year, month ORDER BY year, month ASC"
    print(sql)
    for year in years:
        # 修复参数传递为元组
        data_part = optimize_list(get_data(sql, (year,)))
        data.append(data_part)
    print(data)
    labels = optimize_list(get_data("SELECT DISTINCT month FROM faillisementen.tbldata"))
    titels= "Number Employees in faillisementen"
    colors = ['red', 'green']
    return render_template("chart.html", data=data, labels=labels)

这样修改后,应该就能解决你遇到的两个错误了。

内容的提问来源于stack exchange,提问作者Brian Thery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:44