Вложенные циклы в SQL с инструкциями SELECT с помощью Python

#python #mysql #loops

#python #mysql #петли #циклы

Вопрос:

новичок в программировании и пытаюсь разобраться в назначении. Я должен выполнить вложенный цикл только с операторами select (без операторов join) с помощью Python. В некоторой растерянности относительно того, как это сделать.

Ниже приведен код, который я использовал. Но продолжаю получать сообщение об ошибке, в котором говорится, что имя course_no не определено.

Заранее извините, если это вопрос n00b!

 query = ("SELECT first_name, last_name FROM instructor")
query2 = ("SELECT course_no, section_no FROM section")

try:
    cursor.execute(query)

    print("Result set returned")

    for (first_name, last_name) in cursor:
        print(first_name   " "   last_name)

        for (first_name, last_name) in cursor:
            cursor.execute("SELECT course_no, section_no FROM section")
            print(course_no   " "   section_no)
    cursor.close()
except mysql.connector.Error as err:
    print(err)
  

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

1. Почему бы не использовать вложенный запрос только в sql?

Ответ №1:

Как указано в ошибке, first_name и last_name не определены. Значения передаются в виде кортежей, поэтому вы можете получить доступ по значению индекса

 for row in cursor:
    print(row[0],row[1]) # first_name, last_name
  

Также вам необходимо получить результаты, сохраненные в переменной для

cursor.execute("SELECT course_no, section_no FROM section")

Также не называйте cursor дважды

Ответ №2:

Я постараюсь ответить на ваш вопрос настолько хорошо, насколько смогу его понять. course_no действительно не определен, поскольку он заключен в cursor. Попробуйте снова выполнить цикл по курсору, но на этот раз для course_no и section_no. Также я предлагаю вам использовать другой курсор для каждого запроса, поскольку в следующих циклах курсор больше не имеет значений внешних циклов. Демонстрация некоторого кода:

 try:
    cursor1.execute(query)

    print("Result set returned")

    for (first_name, last_name) in cursor1:
        print(first_name   " "   last_name)

        cursor2.execute("SELECT course_no, section_no FROM section")
        for (course_no, section_no) in cursor2:
            print(course_no   " "   section_no)
        cursor2.close()
    cursor1.close()
except mysql.connector.Error as err:
    print(err)