2016-04-24 7 views
0

Я изучаю python и ударяю roadblock, работая над веб-приложением. Я пытаюсь получить данные из локальной базы данных (mariadb), и когда я пытаюсь распечатать результаты, все, что я вижу, это ().Python cursor.fetchall() возвращает пустой кортеж

Эта функция получает данные из БД:

def getHikeInfo(name): 

    conn, cursor = getConnectionAndCursor() 

    cursor.execute("SELECT * FROM hiking WHERE name = %s", [name]) 

    # fetch the results 
    data = cursor.fetchall() 

    # clean up 
    cursor.close() 
    conn.close() 

    return data 

Этот код вызывает функцию:

if 'name' in form: 
    #unpack into python variable 
    name=form['name'].value 
    print name #debug purpose to check name is proper 
    data = getHikeInfo(name) 
    print data #prints '()' 

else: 
    data = getAllHikes() 
    showAllHikes(data) 

Я попытался кучу вещей, от изменения, как я конкатенировать имя для передачи имени в качестве параметра и ничего не работает. Имя на 100% обязательно включено в таблицу. Кажется, я не вижу проблемы.

Любая помощь приветствуется.

+0

Я не знаком с mariadb, но имеет ли он интерфейс командной строки, где вы можете запускать SQL-запрос, чтобы абсолютно убедиться, что он возвращает результаты? Таким образом, вы можете подтвердить, что это проблема с кодом. Вы также можете распечатать программу, которую она отправляет, чтобы вы могли убедиться, что она правильно вставлена ​​из переменной. –

+0

@SamIreland Я выполнил запрос на интерфейсе mariadb и вывел ожидаемый результат. Проблема, похоже, связана с кодом Python. Спасибо за предложение –

+0

@ishyfishy, ​​мне нужно какое-либо дополнительное разъяснение, чтобы ответить на ваш вопрос? Пожалуйста, дайте мне знать, поэтому я могу внести изменения. Благодаря! – Abdou

ответ

0

Если name аргумент для getHikeInfo функции является строка, переписать cur.execute вызов, как это:

cursor.execute("SELECT * FROM hiking WHERE name = '%s'"% name) 

Но если вы передаете в списке вашей getHikeInfo функции, то вы можете сделать :

cursor.execute("SELECT * FROM hiking WHERE name IN {}".format(tuple(name))) 

Таким образом, вам нужно будет переписать getHikeInfo функцию следующим образом:

def getHikeInfo(name): 

    conn, cursor = getConnectionAndCursor() 
    cursor.execute("SELECT * FROM hiking WHERE name = %s"%name) 
    #if you're passing in a list for `name` then you would need to use my second suggestion. 

    # fetch the results 
    data = cursor.fetchall() 

    # clean up 
    cursor.close() 
    conn.close() 

    return data 

Пока ваша таблица содержит данные, соответствующие условию, заданному аргументом name, вы можете увидеть некоторые результаты с этим.

Надеюсь, это поможет.

Смежные вопросы