2201_76029190 2023-06-02 07:03 采纳率: 50%
浏览 19
已结题

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)')

  • 写回答

3条回答 默认 最新

  • 阳光宅男xxb 2023-06-02 09:08
    关注

    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等变量就是你要存入数据库的数据

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 创建了问题 6月2日

悬赏问题

  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?