首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用MqSQL在flask上执行查询

无法使用MqSQL在flask上执行查询
EN

Stack Overflow用户
提问于 2021-06-26 00:37:16
回答 2查看 31关注 0票数 0

你好,我正在尝试使用Flask和my数据库执行一个SQL查询,查询返回一个JSON在前端管理我的JQuery。目标是使用搜索栏来查找与数据库匹配的任何内容。例如,如果我只使用一个"like“句子,那么查询就可以正常工作。

代码语言:javascript
运行
复制
query = "SELECT terapia.*,terapeuta.nombre,cliente.nombres, especialidad.descripcion FROM terapia LEFT JOIN terapeuta ON terapeuta.id_terapueta = terapia.terapeuta_id_terapueta LEFT JOIN cliente ON cliente.id_cliente = terapia.cliente_id_cliente LEFT JOIN especialidad ON especialidad.id_especialidad = terapeuta.id_especialidad WHERE especialidad.descripcion LIKE '{}%'".format(searchbox)

但在我使用and "OR“语句进行多次搜索时,如下所示:

代码语言:javascript
运行
复制
query = "SELECT terapia.*,terapeuta.nombre,cliente.nombres, especialidad.descripcion FROM terapia LEFT JOIN terapeuta ON terapeuta.id_terapueta = terapia.terapeuta_id_terapueta LEFT JOIN cliente ON cliente.id_cliente = terapia.cliente_id_cliente LEFT JOIN especialidad ON especialidad.id_especialidad = terapeuta.id_especialidad WHERE especialidad.descripcion LIKE '{}%' or terapeuta.nombre LIKE '{}%'".format(searchbox)

查询根本不起作用,并输出此错误

error for jQuery

奇怪的是,在Dbebaber上执行相同的查询可以很好地工作,显然将'{}%‘替换为'string%',我不知道为什么查询拒绝工作,此外,我还包含了完整的python和Jquery代码。

烧瓶:

代码语言:javascript
运行
复制
from flask import render_template, request, redirect, url_for, session, flash, jsonify
@terapia.route('/livesearch', methods=["POST","GET"])
def livesearch():
    searchbox = request.form.get('text')
    cur = mysql.connection.cursor()
    query = "SELECT terapia.*,terapeuta.nombre,cliente.nombres, especialidad.descripcion FROM terapia LEFT JOIN terapeuta ON terapeuta.id_terapueta = terapia.terapeuta_id_terapueta LEFT JOIN cliente ON cliente.id_cliente = terapia.cliente_id_cliente LEFT JOIN especialidad ON especialidad.id_especialidad = terapeuta.id_especialidad WHERE especialidad.descripcion LIKE '{}%' or terapeuta.nombre LIKE '{}%'".format(searchbox)
    cur.execute(query)
    result = cur.fetchall()
    return jsonify(result)

HTML和JQUERY

代码语言:javascript
运行
复制
<div class="col-md-12">
        <input type="text" id="livebox">
        <p id="search-response"></p>
    </div>
    <script>
        $(document).ready(function(){
            $("#livebox").on("input", function(e){
                let textinlivebox = $("#livebox").val();
                $.ajax({
                    method: "POST",
                    url: "/terapia/livesearch",
                    data:{text: textinlivebox},
                    success: function(res){
                        //document.getElementById('search-response').innerHTML = res;
                        console.log(res)
                    }
                })
            });
        });
    </script>

欢迎任何帮助或建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-26 00:44:39

请仔细阅读SQL注入漏洞,并使用:

代码语言:javascript
运行
复制
query = 'SELECT ... FROM ... WHERE especialidad.descripcion LIKE %s or terapeuta.nombre LIKE %s'
cur.execute(query, (searchbox, searchbox))

这将转义用户输入,因此恶意用户无法将SQL命令写入搜索框。

票数 0
EN

Stack Overflow用户

发布于 2021-06-26 16:55:23

请查看here以了解如何在sql炼金术(负责sql注入)中使用'like‘。

此外,我建议您阅读更多关于sqlalchemy的内容,以便编写尽可能具有可读性的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68134406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档