Как исправить запись в файл жестко закодированных верхних и нижних колонтитулов, когда нет записей, доступных для извлечения из базы данных python и mysql

#python #mysql

#python #mysql

Вопрос:

Я записываю данные в файл на Python из таблиц баз данных MYSQL с жестко закодированными верхними и нижними колонтитулами, используя следующий код:

 for record in cur.fetchall():
    filteredrecord = (record[0]   "t"   record[1])

    print(filteredrecord)


    feed_file = open("c:\test\test.txt", "w")
    feed_file.write("Name"   "t"   "Age" )
    feed_file.write("n"   (filteredrecord))
    feed_file.write("n"   "ENDOFFILE")
    feed_file.close()
  

Это отлично работает, когда в таблице базы данных присутствуют записи, однако, когда в таблице базы данных, из которой я выбираю, нет записей, в мой файл ничего не записывается, даже мои жестко закодированные верхние и нижние колонтитулы.

При наличии записи я получаю следующий вывод:

вывод при наличии записей в таблице db

Я хотел бы, чтобы в мой файл было записано следующее, когда записей нет:

вывод необходим, когда в таблице db нет записей

Как я могу заставить вышеуказанное записать в файл, когда в моей таблице базы данных нет записей?

Ответ №1:

У вас есть весь ваш код для открытия файла, записи верхнего и нижнего колонтитулов и повторного закрытия файла, и все это в цикле for итерации по записям, возвращенным из запроса. Фактически, если у вас более одной записи, следует продолжать открывать файл, перезаписывать содержимое новой записью, включая верхний и нижний колонтитулы, и закрывать файл.

Что вы хотите, так это открыть файл один раз, записать верхний колонтитул, затем перебрать записи и записать каждую, затем, наконец, записать нижний колонтитул и закрыть файл. Код может выглядеть примерно так:

 with open("c:\test\test.txt", "w") as feed_file:
    feed_file.write("Name"   "t"   "Age" )

    for record in cur.fetchall():
        filteredrecord = (record[0]   "t"   record[1])
        print(filteredrecord)
        feed_file.write("n"   (filteredrecord))

    feed_file.write("n"   "ENDOFFILE")
  

Обратите внимание, что вам не нужно явно закрывать файл при использовании with структуры.