Python MYSQL Как я могу перебирать выбор?

Я пытаюсь создать футбольную базу данных с помощью 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
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Если вы делаете for row in result3:, то нет необходимости индексировать элементы result3 с помощью индексации.
  2. executemany ожидает все значения сразу. Но вы не можете использовать это для оператора SELECT; вы просто вернете результаты последнего SELECT.
  3. Но я считаю, что реальная проблема заключается в следующем: второй аргумент 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

большое спасибо, я не знал об этой функции GROUP BY, сначала у меня был страх, что она не будет работать, если я сохранил один сезон в одной таблице, поэтому у меня несколько раз одна и та же команда, но она работает: )

NFTS 20.12.2020 15:59

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

Booboo 20.12.2020 16:09

Другие вопросы по теме