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

Flask+Python程序报错:TypeError: 无法将NoneType与字符串拼接

错误排查与解决方案

直接错误原因

你的请求URL存在参数分隔符错误:daste=2$takh=20% 里的$应该替换为&,这导致takh参数无法被正确获取,值为None。当你把None和字符串直接拼接时,就会触发TypeError: can only concatenate str (not "NoneType") to str错误。

正确的请求URL应为:

http://192.168.1.33:5000/UP_Pro?id=2&Name=ram&tozih=ram-DDR4&Pol=200$&aks=ll&daste=2&takh=20%

核心问题修复:SQL注入风险与代码重构

当前代码直接拼接用户输入到SQL语句中,不仅容易出现参数为None的拼接错误,还存在严重的SQL注入漏洞,攻击者可通过构造恶意参数直接操控数据库。必须改用参数化查询修复:

@app.route('/UP_Pro' ,methods = ['GET'])
def MMD13():
    # 获取参数并设置默认值,避免出现None
    id = request.args.get('id', '') 
    Name = request.args.get('Name', '')
    tozih = request.args.get('tozih', '')
    Pol = request.args.get('Pol', '')
    aks = request.args.get('aks', '')    
    daste = request.args.get('daste', '')
    takh = request.args.get('takh', '')
    
    # 校验必要参数,避免无效更新
    if not id:
        return "缺少必要参数id"
    
    # 使用with语句自动管理数据库连接,无需手动关闭
    with sqlite3.connect('Online_Shop.db') as a:
        # 参数化查询,用?作为占位符
        sql = """UPDATE Products 
                 SET Products_Name = ?, Description = ?, Price = ?, 
                     Image = ?, Category_ID = ?, Discount = ?
                 WHERE Products_ID = ?"""
        # 按顺序传入参数元组
        a.execute(sql, (Name, tozih, Pol, aks, daste, takh, id))
        a.commit()
    
    return id   

app.run(host='0.0.0.0',port=5000)

额外优化建议

  • 给request.args.get()设置默认值,避免参数缺失时出现None
  • 可根据业务需求添加更严格的参数校验(如数值类型校验、长度限制等)
  • 使用with语句管理数据库连接,能自动处理连接关闭,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:35:09