Я пытаюсь создать футбольную базу данных с помощью MySQL. Я сделал выборку, которая содержит команды, и я хочу просмотреть их в другом выборе, поэтому мне не нужно писать 18 разных вариантов. Помогите, где я ошибся? Я продолжаю получать ошибки.
k = 0
#Teams in one list
my_sq7 = "SELECT Team FROM bundesligatabella_2020_2021"
my_cursor.execute(my_sq7)
result3 = my_cursor.fetchall()
for row in result3:
my_sq9 = "SELECT SUM(Home_scored) FROM bundesliga_2020_2021_2 WHERE Home = %s"
my_cursor.executemany(my_sq9, result3[k][0])
result4 = my_cursor.fetchall()
k += 1
Я также хочу сохранить результат в другом списке, чтобы обновить другой столбец.
Ошибка:
Traceback (most recent call last):
File "python\database.py", line 141, in <module>
my_cursor.executemany(my_sq9, result3[k][0])
File "Python\Python39\lib\site-packages\mysql\connector\cursor.py", line 675, in executemany
self.execute(operation, params)
File "Python\Python39\lib\site-packages\mysql\connector\cursor.py", line 569, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "Python\Python39\lib\site-packages\mysql\connector\connection.py", line 651, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "Python\Python39\lib\site-packages\mysql\connector\connection.py", line 538, in _handle_result
raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1
for row in result3:
, то нет необходимости индексировать элементы result3
с помощью индексации.executemany
ожидает все значения сразу. Но вы не можете использовать это для оператора SELECT; вы просто вернете результаты последнего SELECT.execute
или executemany
должен быть list
или tuple
(или каким-либо итерируемым). В случае executemany
это должен быть, например, список списков. Вы, кажется, не проходили ни один из них.Так:
result3 = my_cursor.fetchall()
my_sq9 = "SELECT SUM(Home_scored) FROM bundesliga_2020_2021_2 WHERE Home = %s"
result4 = []
for row in result3:
my_cursor.execute(my_sq9, (row[0],))
result4.append(my_cursor.fetchone())
Рассматривали ли вы получение желаемого с помощью следующего:
SELECT Team, SUM(Home_scored) FROM bundesligatabella_2020_2021
GROUP BY Team
Исправление:
SELECT Team, SUM(Home_scored) FROM
bundesligatabella_2020_2021 t1 JOIN bundesliga_2020_2021_2 t2 on t1.Team = t2.Home
GROUP BY Team
Я поспешил со списком и не заметил, что вы имеете дело с двумя отдельными. Я опубликовал то, что, по моему мнению, теперь является правильным SQL для получения желаемых результатов с помощью одного SQL-запроса.
большое спасибо, я не знал об этой функции GROUP BY, сначала у меня был страх, что она не будет работать, если я сохранил один сезон в одной таблице, поэтому у меня несколько раз одна и та же команда, но она работает: )