#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)