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
相关产品推荐
相关产品推荐

