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

使用Python Django向SQL数据库插入表单数据的代码错误排查求助

Django表单数据插入SQL数据库的代码错误分析与修复

存在的问题:

  • SQL注入漏洞:直接用字符串格式化拼接SQL语句,会被恶意用户利用注入攻击,破坏数据库或窃取数据,严重违反安全规范。
  • 事务未提交:cnxn.commit缺少括号,正确写法是cnxn.commit(),否则事务不会真正提交,数据不会写入数据库。
  • 变量未初始化风险:如果表单未传递username或email字段,name和email变量会未定义,触发NameError。
  • 数据库资源泄漏:未关闭游标和连接,长期运行会占用多余资源,导致性能问题。
  • 无异常处理:数据库操作可能出现连接失败、插入失败等错误,没有捕获逻辑无法排查问题。

修复后的代码:

def signup(request):
    print("Signup Started ") 
    if request.method == 'POST':
        # 直接获取表单值,设置默认值避免未定义错误
        name = request.POST.get('username', '')
        email = request.POST.get('email', '')
        
        print('Username = ', name)
        print('Email = ', email)
        
        # 用with语句自动管理连接和游标,无需手动关闭
        try:
            with pyodbc.connect('DRIVER={SQL Server};SERVER=PANKAJ\\SQLEXPRESS;DATABASE=student_records') as cnxn:
                with cnxn.cursor() as cursor:
                    # 参数化查询彻底避免SQL注入
                    sql = "INSERT INTO student (username, email) VALUES (?, ?)"
                    cursor.execute(sql, (name, email))
                    # with块结束时会自动提交事务,也可手动调用cnxn.commit()
                    print("Data inserted successfully")
        except Exception as e:
            print(f"插入数据失败: {str(e)}")
            # 可添加错误反馈逻辑,比如返回错误提示给前端
    return render(request, 'signup.html')

内容的提问来源于stack exchange,提问作者Pankaj 4 U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:01:19