python,数据库,pyodbc函数

请教,用pydboc连接数据库实现插入功能时出现的问题,数据库为sql server

这是后台代码


def VCD_info(request):
    db = pyodbc.connect('DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=VCD_info;UID=sa;PWD=15036838685a;Trusted_Connection=No')
    mycursor = db.cursor()
    mycursor.execute("select * from VCD")
    rows = mycursor.fetchall()
   
    data = {
        "VCD": rows
    }
    if request.method == "GET":
        return render(request, 'VCD_info.html', data)

    # 获取提交的数据
    Vno_info = request.POST.get("Vno")
    Vname_info = request.POST.get("Vname")
    Actor_info = request.POST.get("Actor")
    Price_info = request.POST.get("Price")
    Vtype_info = request.POST.get("Vtype")
    amount_info = request.POST.get("amount")

    # print("Vno:", Vno_info)
    # print("Vname:", Vname_info)
    # print("Actor:", Actor_info)
    # print("Price:", Price_info)
    # print("Vtype:", Vtype_info)
    # print("amount:", amount_info)

    # 添加到数据库
    mycursor = db.cursor()
    print("insert into VCD values ('Vno_info','Vname_info','Actor_info','Price_info','Vtype_info','amount_info')")
    mycursor.execute("insert into VCD values ('Vno','Vname','Actor','Price','Vtype','amount')")
    
    db.commit()
    mycursor.close()
    db.close()
    return HttpResponse("添加成功")

这是前端代码

 <div id="myModal" class="modal">
                <div class="modal-content">
                    <div class="modal-header">
                        <h4>新增VCD信息</h4>
                        <span id="closeBtn" class="close">×</span>
                    </div>
                    <div class="modal-body">
                        <form method="post">
                            {% csrf_token %}
                        <p>
                            VCD编号:<input type="text" name="Vno" placeholder="请输入VCD编号">
                        </p>
                        <p>
                            VCD姓名:<input type="text" name="Vname" placeholder="请输入VCD姓名">
                        </p>
                        <p>
                            VCD作者:<input type="text" name="Actor" placeholder="请输入VCD作者">
                        </p>
                        <p>
                            VCD价格:<input type="text" name="Price" placeholder="请输入VCD价格">
                        </p>
                        <p>
                            VCD类型:<input type="text" name="Vtype" placeholder="请输入VCD类型">
                        </p>
                        <p>
                            VCD库存:<input type="text" name="amount" placeholder="请输入VCD库存">
                        </p>
                    </div>
                    <div class="modal-footer">
                        <div class="pageInfoBox"></div>
                        <button class="addButton_ok" type="submit">确定</button>
                        <button class="addButton_no">取消</button>
                    </div>
                </form>
                </div>
            </div>


这是报错信息

Traceback (most recent call last):
  File "D:\python_path\Lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "D:\python_path\Lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\python_path\Lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\vscode\html文件\html学习\login\login\view.py", line 49, in VCD_info
    mycursor.execute("insert into VCD values ('Vno','Vname','Actor','Price','Vtype','amount')")
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]从数据类型 varchar 转换为 numeric 时出错。 (8114) (SQLExecDirectW)')

mycursor.execute("insert into VCD values ('Vno','Vname','Actor','Price','Vtype','amount')")
这里明显的错误啊,插入的都是些字符串,你这里应该是插入对应变量的数据值,而不是vno、vname这字符串本身。
修改为:
mycursor.execute("insert into VCD values (%s,%s,%s,%s,%s,%s)",(Vno_info,Vname_info,Actor_info,Price_info,Vtype_info,amount_info))

其中Vno_info等变量就是你要存入数据库的数据

从报错信息最后一行来看:pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]从数据类型 varchar 转换为 numeric 时出错。 (8114) (SQLExecDirectW)')
因为插入的数据类型与数据库表中的数据类型不匹配导致的,检查一下插入数据类型和数据库表数据类型

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7481549
  • 这篇博客也不错, 你可以看下python中pyodbc连接sql server数据库
  • 除此之外, 这篇博客: python连接sql server方法总结中的 pyodbc 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • command = 'DRIVER={用户数据源名称};server=localhost;DATABASE=jobinfo;UID=用户名;PWD=密码'
    conn = pyodbc.connect(command)
    

    因为pyodbc依赖于ODB数据源管理程序来连上sql server,所以需要手动添加sql server为用户数据源。driver赋值为用户数据源中相应的名称。server类似于pymssql的host,不在此赘述

    数据源
    在“你想连接哪一个sql server”那里选择你创建好的服务器实例,最后一步向导测试一下是否能连接成功。

    THE END

  • 以下回答由chatgpt基于相关博客总结生成:

    很抱歉,由于缺少具体的代码和错误信息,无法准确回答和检查代码中的问题。建议您提供更详细的信息和代码,以便更好地解决问题。