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

