Ошибка Python: сначала выполнить()

#python #mysql #django

#python #mysql #django

Вопрос:

Когда я пытаюсь запустить это представление / функцию, я получаю следующую ошибку execute() first .

 def homepage(request, parem1, parem2):
    # open sql connection
    cursor = connection.cursor()

    if parem1 == 'p':

        if parem2 == 'all':   
            cursor.execute((" SELECT eventname, id, party, DATE_FORMAT(eventdate, GET_FORMAT(DATE,'EUR')) FROM mainapp_eventdetails ORDER BY eventdate DESC "))
        else:
            cursor.execute((" SELECT eventname, id, party, DATE_FORMAT(eventdate, GET_FORMAT(DATE,'EUR')) FROM mainapp_eventdetails WHERE party = '"   parem2   "' ORDER BY eventdate DESC "))

    else:

        if parem2 == 'all':   
            cursor.execute((" SELECT eventname, id, party, DATE_FORMAT(eventdate, GET_FORMAT(DATE,'EUR')) FROM mainapp_eventdetails ORDER BY eventdate DESC "))
        elif parem2 == 'APR':
            cursor.execute((" SELECT eventname, id, party, DATE_FORMAT(eventdate, GET_FORMAT(DATE,'EUR')) FROM mainapp_eventdetails WHERE eventdate between '2011-4-1' AND '2011-5-1' ORDER BY eventdate DESC "))

    datalist = [memedetails for memedetails in cursor.fetchall()]

    # close sql connection
    cursor.close()
    connection.close()

    # group by eventdate
    datalistsorted = []

    # i dont like how this part depends on the sequence of columns retrieved in the above SQL. 
    for k, g in groupby(datalist, key=lambda x:x[3]):
        datalistsorted.append((k,[(i[0],i[1],i[2]) for i in g]))

    return render_to_response('base.html', {'eventlist': datalistsorted, 'parem2': parem2.upper()})
  

Но если бы я изменил эту строку elif parem2 == 'APR': на else: , она работала бы нормально.

Почему это так и как я могу заставить мой elif работать? (Ниже приведены дополнительные условия, но я опустил их для простоты)

Ответ №1:

Предположительно, вы столкнулись со случаем, когда parem1 это не ‘p’ и parem2 не ‘APR’. В этом случае вы не выполняли никаких вызовов execute.

Возможно, вам следует ограничить if / else простым определением строки, которая должна быть выполнена, с общим значением по умолчанию и выполнить вызов execute вне блока if.

Комментарии:

1. Вы правы, это связано с моим синтаксическим анализом parem2 в ‘apr’ с нижними заглавными буквами, следовательно, он не попадает. Спасибо. Глупая ошибка.

2. Есть ли на самом деле веская причина, по которой он выдает ошибку? Вы можете просто сказать: Хорошо, запросов нет, все в порядке, у меня меньше работы… Я не понимаю, почему это должно вызывать исключение.