Невозможно сопоставить ввод python flask api со значением запроса mysql - PullRequest
1 голос
/ 27 мая 2020

У меня есть простой python / flask api, который я не могу сопоставить ввод в api с mysql результатами выбора:

mycursor = mydb.cursor()
mycursor.execute('SELECT code FROM users')
codes = mycursor.fetchall()

коды печатаются так: '[(' 0000 ' ,), ('0001',), ('0003',)] '

Вот маршрут api и код поиска:

# API route for when a code is passed
@app.route('/api/v1/codes', methods=['GET'])
def checkcode():
    # Check if a code was provided as part of the URL.
    # If code is provided, assign it to a variable.
    # If no code is provided, display an error in the browser.
    if 'id' in request.args:
        code = request.args['id']
        print(id)
    else:
        return "Error: No id field provided. Please specify an id."

    # Check if code matches
    if code in codes:
        #unlock(),
        pushMessage("Message from PiAPI", "Building Door Unlocked.")
    else:
        wrong = 'Wrong Code was sent ' + (code)
        pushMessage('Message from PiAPI', wrong)

Я пытался получить код совпадают всеми возможными способами, которые я могу себе представить:

code = "('" + request.args['id'] + "',)"
code = "'" + request.args['id'] + "',"
code = "'" + request.args['id'] + "'"

Пока ничего не совпало, даже если оно выглядит правильно и правильно отправляется в else: pushmessage. В api я ввожу 0000 (/ api / v1 / codes? Id = 0000)

Мне 42 года, и я новичок в кодировании, поэтому, пожалуйста, простите любую глупость. :)

1 Ответ

1 голос
/ 27 мая 2020

На основе этого ответа кода @mechanical_meat в комментарии выше.

В настоящее время у вас есть

codes = [('0000',), ('0001',), ('0003',)]

, который представляет собой список с кортежами внутри него.

Таким образом то, что вы в конечном итоге сравниваете, когда id = 0000

if 0000 == ('0000',):

Что, как вы указали, всегда ложно

codes = [record[0] for record in codes]

изменит его, чтобы он выглядел так:

codes = ['0000', '0001', '0003']

т.е. сгладить

...