GET-запрос с параметрами FlasK / Rest API

0

Я пытаюсь сделать запрос GET, который должен напечатать конкретную строку из моей базы данных в зависимости от того, какие аргументы установлены. Аргумент должен быть названием курса, и я хочу, чтобы он получал все данные из выбранного курса. Может быть немного проще объяснить это как запрос SQL. Запрос может выглядеть так: "SELECT * FROM courselist WHERE course = 'D0024E';" где "курс".

Мне удалось сделать fetchall() и получить все строки из определенной таблицы, но мне не удалось заставить параметры работать правильно, чтобы я мог получить информацию из определенного курса.

from flask import Flask
from flask import render_template
import requests
from flask import request
from flask import jsonify
import mysql.connector

app = Flask(__name__)

mydb = mysql.connector.connect(user='Mille',
                          auth_plugin='mysql_native_password',
                          password='jagheter12',
                          host='localhost',
                          database='paraplyet')

@app.route('/')
def index():
    return render_template("index2.html")

@app.route('/courses', methods= ["GET"])
def getStudentInCourse():
    myCursor2 = mydb.cursor()
    query2 = ("SELECT * FROM paraplyet.kursinfo")
    myCursor2.execute(query2)
    myresult2 = myCursor2.fetchall()

    return jsonify(myresult2)

if __name__ == '__main__':
    app.run()
  • 0
    какие параметры вам не удалось правильно настроить? Каким должен быть ваш ожидаемый результат?
  • 0
    У меня нет для вас решения, но при работе с Flask и базами данных я всегда использовал SQLAlchemy, который отлично интегрируется с flask и работает с большинством (если не со всеми) типами БД.
Показать ещё 11 комментариев
Теги:
flask
flask-restful

2 ответа

0

На самом деле, есть несколько моментов, когда ваш код может потерпеть неудачу, потому что установить правильную интерфейсную внутреннюю цепочку в Flask немного сложно (но в конце стоит). У вас есть интерфейсный HTML- код противоположной части, где вы начинаете свой запрос с правильной переменной, например "курса" в вашем примере, которая может выглядеть следующим образом:

<form action="/courses" method="post">
  <input>
  <button type="submit"></button>
</form>

Тогда Flask as back-end получит эту переменную (параметр) как часть вашей строки запроса как часть строки URL. Вы можете получить этот параметр в форме:

course = request.form.get('course')

Чтобы достичь этого, вы должны добавить "POST" методы представления, так как он обрабатывает только "GET" -s по умолчанию.

@app.route('/courses', methods=["GET", "POST"])

Затем вы можете использовать эту переменную для завершения ваших внутренних операций:

query2 = ("SELECT * FROM courseInfo where courseCode = '" + course +  "';")

эти результаты, то вы можете передать его обратно через интерфейс:

return jsonify(myresult2)

Ваш код на python/flask должен выглядеть примерно так:

from flask import Flask
from flask import render_template
import requests
from flask import request
from flask import jsonify
import mysql.connector

app = Flask(__name__)

mydb = mysql.connector.connect(user='Mille',
                          auth_plugin='mysql_native_password',
                          password='jagheter12',
                          host='localhost',
                          database='paraplyet')

@app.route('/')
def index():
    return render_template("index2.html")

@app.route('/courses', methods= ["GET", "POST"])
def getStudentInCourse():

    if request.method == "POST" and request.form.get('course') != '':

        myCursor2 = mydb.cursor()

        course = request.form.get('course')
        query2 = ("SELECT * FROM courseInfo where courseCode = '" + course +  "';")

        myresult2 = myCursor2.execute(query2)

        return jsonify(myresult2)

if __name__ == '__main__':
    app.run()
  • 0
    Недурно до вашего поста. Я прочитал это до конца и понимаю большинство из них. Сейчас я получаю сообщение об ошибке, которое, по моему мнению, связано с «TypeError: невозможно объединить объекты« str »и« NoneType »». Есть догадки? У меня подключение к БД работает. Может быть, это связано со строкой «Курс»?
  • 0
    Комментарий выше @Geecode
Показать ещё 4 комментария
0

Вам необходимо обновить URL маршрута, чтобы получить параметры

@app.route('/courses/<course_code>', methods= ["GET"])
def getStudentInCourse(course_code):

Затем вы можете использовать этот код_курса для фильтрации результатов.

  • 0
    Я пробовал это раньше, и я думаю, что мой запрос неверен. Я хочу, чтобы <курс_код>, который установлен по URL-адресу, использовался в запросе SQL2. Есть какой-либо способ сделать это? @ app.route ('/ courses / <course_code>', method = ["GET"]) def getStudentInCourse (course_code): query2 = ("SELECT * FROM paraplyet.kursinfo WHERE courseCode = 'course_code'") // мой запрос Ты понимаешь, как я этого хочу? Я хочу, чтобы то, что пользователь помещал в URL, а затем использовал эту строку в моем запросе SQL. Это, однако, не работает. @ Хасиб Мажар Ранга

Ещё вопросы

Сообщество Overcoder
Наверх
Меню