Python 从桥接表返回数据的SQL查询返回错误(可能是由于我的查询语法!)

Python 从桥接表返回数据的SQL查询返回错误(可能是由于我的查询语法!),python,mysql,database,flask,Python,Mysql,Database,Flask,我在使用python/flask从数据库中获取任何数据时遇到了问题(可能是因为我对MySQL比较陌生,我的查询语法可能很糟糕!) 我正在尝试从数据库中获取桥接表中的数据,因为它是在下面创建的: CREATE TABLE student ( student_id int AUTO_INCREMENT, first_name varchar (20) NOT NULL, last_name varchar (20) NOT NULL, year_began int NOT NULL, PRIMARY

我在使用python/flask从数据库中获取任何数据时遇到了问题(可能是因为我对MySQL比较陌生,我的查询语法可能很糟糕!)

我正在尝试从数据库中获取桥接表中的数据,因为它是在下面创建的:

CREATE TABLE student (
student_id int AUTO_INCREMENT,
first_name varchar (20) NOT NULL,
last_name varchar (20) NOT NULL,
year_began int NOT NULL,
PRIMARY KEY (student_id)
);

CREATE TABLE courses (
course_code varchar (7) NOT NULL,
course_title varchar (100) NOT NULL,
year_delivered int NOT NULL,
PRIMARY KEY (course_code)
);

CREATE TABLE enrollments (
student_id int NOT NULL,
course_code varchar (7) NOT NULL,
CONSTRAINT enrollment PRIMARY KEY (student_id, course_code),
FOREIGN KEY (student_id) REFERENCES student (student_id),
FOREIGN KEY (course_code) REFERENCES courses (course_code) 
);
我当前的python代码(包括我的查询)是这样编写的:


        student_name = str(request.form['student_name_search'])
        student_name = ' '.join(student_name.split())

        try:
            cursor = mydb.cursor()
            cursor.execute("SELECT student_id, first_name, last_name FROM student AND course_code FROM courses\
            LEFT JOIN enrollments on student_id=student_id LEFT JOIN course_code=course_code WHERE\
                (CONCAT(first_name,last_name ) LIKE '%{}%')".format(student_name))
            search_result = cursor.fetchall()
            cursor.close()
            return render_template('studentselect_results.html', student_name = student_name)


        except mysql.connector.Error as err:
            cursor.close()
            return failure('studentsearch',f"Error message: {err}. Search didn't work")
输入搜索条件的HTML如下所示:

<form action="{{ url_for('process_searchstudent') }}" method="POST">
            <div class="form-row justify-content-center">
                <div class="form-row">
                    <div class="form-group col-12">
                        <input type="text" class="form-control" id="student_name_search" name="student_name_search" 
                        placeholder="Enter Students Name">
                    </div> 
                </div>
            </div>   
            <!-- SUMBIT/RESET BUTTONS-->
            <div class="form-row justify-content-center">
                <div class="form-group row">
                    <div class="form-group">
                        <input type="submit" class="btn btn-outline-success" value="Search">
                        <input type="button" id="resetBtn" class="btn btn-outline-danger" value="Reset">
                    </div>
                </div>
            </div>
        </form>
<table class="table table-sm table-striped">
        <thread class="thread-light">
            <tr>
                <th>Student ID:</th>
                <th>Student First Name:</th>
                <th>Student Last Name:</th>
                <th>Click to View Student Details</th>
            </tr>
        </thread>
        <tbody>
            {% for each_result in search_results %}
            <tr>
                <td>{{item[0]}}</td>
                <td>{{item[1]}}</td>
                <td>{{item[2]}}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>

我希望查询返回数据的HTML如下:

<form action="{{ url_for('process_searchstudent') }}" method="POST">
            <div class="form-row justify-content-center">
                <div class="form-row">
                    <div class="form-group col-12">
                        <input type="text" class="form-control" id="student_name_search" name="student_name_search" 
                        placeholder="Enter Students Name">
                    </div> 
                </div>
            </div>   
            <!-- SUMBIT/RESET BUTTONS-->
            <div class="form-row justify-content-center">
                <div class="form-group row">
                    <div class="form-group">
                        <input type="submit" class="btn btn-outline-success" value="Search">
                        <input type="button" id="resetBtn" class="btn btn-outline-danger" value="Reset">
                    </div>
                </div>
            </div>
        </form>
<table class="table table-sm table-striped">
        <thread class="thread-light">
            <tr>
                <th>Student ID:</th>
                <th>Student First Name:</th>
                <th>Student Last Name:</th>
                <th>Click to View Student Details</th>
            </tr>
        </thread>
        <tbody>
            {% for each_result in search_results %}
            <tr>
                <td>{{item[0]}}</td>
                <td>{{item[1]}}</td>
                <td>{{item[2]}}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>

学生证:
学生姓名:
学生姓氏:
单击以查看学生详细信息
{对于搜索结果%中的每个结果,}
{{item[0]}
{{项目[1]}
{{项目[2]}
{%endfor%}
在第一个HTML页面上单击“搜索”按钮时,会出现以下错误:

错误消息:1064(42000):您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第1行中使用near'和course_代码的正确语法,这些代码来自courses LEFT JOIN enrollments on student_id=stud'。搜索无效


非常感谢您的任何帮助

对于
JOIN
查询,这不是正确的语法。请尝试以下方法:

SELECT s.student_id, s.first_name, s.last_name , c.course_code
FROM student s
LEFT JOIN enrollments e on e.student_id = s.student_id
JOIN courses c ON c.course_code = e.course_code 
WHERE CONCAT(s.first_name, s.last_name) LIKE '%{}%'

谢谢@Nick,但是我想要数据进入的HTML表返回空。你知道为什么它没有返回任何东西吗?@halma562你的
LIKE
子句看起来很奇怪-是什么填充了
{}
值?应该在查询的末尾用
.format(student\u name))
填充,在python脚本
student\u name=str(request.form['student\u name\u search')的顶部创建student\u name)student_name='''.join(student_name.split())
如果我直接在MySQL中运行查询并用字符串替换
{}
,比如说
“cor”,是否有任何方法检查查询是否返回任何结果(我假设它没有收到错误,因为您有一个
块除外)
它运行查询时没有任何问题,并返回预期结果