Как исправить «аргумент должен поддерживать итерацию» для табулирования на выходе PyMySQL - PullRequest
2 голосов
/ 21 сентября 2019

Я использую PyMySQL для выполнения запросов на выборку из БД, и я хотел использовать табуляцию для форматирования вывода этих запросов.Мне удалось заставить табулировать работать правильно, когда SQL-запрос включает в себя только выбор одного столбца, но я не могу заставить табулировать работать с запросами, которые включают выбор нескольких столбцов.

Я пробовал следующее:

  • явное именование заголовков с помощью заголовков = ['имя столбца 1', 'имя столбца 2' ...]
  • , говорящее tabulate использовать ключи из словаря, который создает PyMySQL(Я использую DictCursor, и я могу проверить, что вывод является правильным словарем, выполнив 'type (result)'
displayConfigSummary = "select `Product Line`.`Product Line Name`, `Product Configuration`.`Processor`, `Product Configuration`.`Graphics Card`, `Product Configuration`.`Memory Capacity (GB)`, `Product Configuration`.`Storage Capacity (GB)`  from `Product Line`,`Product Configuration` where `Product Configuration`.`Product Line ID` = `Product Line`.`GUID` and `Product Configuration`.`SKU ID` = %s"

cursor.execute(displayConfigSummary,(configID))

result = cursor.fetchone()

print('Here is your completed configuration:\n')

print(tabulate(result, headers='keys', tablefmt='psql'))

Когда я отлаживаю программу, я получаю ошибку -: Exception has occurred: TypeError zip_longest argument #4 must support iteration

1 Ответ

0 голосов
/ 21 сентября 2019

Я обнаружил, что решение этой проблемы закончилось тем, что я должен использовать cursor.fetchall() вместо cursor.fetchone().Несмотря на то, что SQL-запрос выдает только одну строку, используя метод fetchall (), я могу получить табуляцию для распознавания имен столбцов и их распечатки.

displayConfigSummary = "select `Product Line`.`Product Line Name`, `Product Configuration`.`Processor`, `Product Configuration`.`Graphics Card`, `Product Configuration`.`Memory Capacity (GB)`, `Product Configuration`.`Storage Capacity (GB)`  from `Product Line`,`Product Configuration` where `Product Configuration`.`Product Line ID` = `Product Line`.`GUID` and `Product Configuration`.`SKU ID` = %s"

cursor.execute(displayConfigSummary,(configID))

result = cursor.fetchall()

print('Here is your completed configuration:\n')

print(tabulate(result, headers='keys' ,tablefmt='psql'))
...