Что я пытаюсь сделать
Используя SQLAlchemy (с ORM), я сейчас пытаюсь создать такую функцию:
export_database_table_to_excel_file( database_orm_object )
с объектом database_orm_object, таким как
class database_orm_object(db.Model):
id = db.Column(db.Integer, primary_key=True)
some_string = db.Column(db.String(30), unique=True)
Идея состоит в том, чтобы сгенерировать таблицу Excel, которая печатает ключи столбцов в виде строки заголовка, за которой следует по одной строке для каждой записи базы данных. Поскольку любая таблица базы данных может быть передана функции, количество столбцов и имена неизвестны.
Что работает
Пока что я могу создать таблицу со строкой заголовков, для приведенного выше примера будет файл Excel, содержащий две ячейки:
| id | some_string |
Это делается путем извлечения всех столбцов database_orm_object и их ключей. Затем ключи добавляются в (пустой) файл Excel в памяти.
def create_download_file(database_orm_object):
book = Workbook()
sheet = book.active
col_headers = database_orm_object.__table__.columns.keys()
sheet.append(col_headers) # add column keys as header row
book.save("generated.xlsx")
Что не работает
Я не знаю, как получить доступ к элементам записи базы данных. Мой план состоял в том, чтобы создать два цикла for, внешний цикл, который выполняет итерацию по всем строкам в результате запроса query.all (), и внутренний цикл, который выполняет итерацию по значениям database_orm_object. Внутренний цикл добавляет значения в массив, внешний цикл добавляет этот массив в виде строки таблицы в файл Excel.
Код
Часть кода уже упоминалась в , что работает . Два цикла for были добавлены и предназначены для итерации по результатам запроса (внешний) и каждому из значений результатов (внутренний). col_id и query_result.col_id являются разными типами и служат иллюстрацией того, чего я хочу достичь:
def create_download_file(database_orm_object):
book = Workbook()
sheet = book.active
col_headers = database_orm_object.__table__.columns.keys()
sheet.append(col_headers) # add column keys as header row
for item in database_orm_class.query.all():
row = [] # create an empty row
for col_id in col_headers: # ??? iterate over columns
row.append(item.col_id) # ??? add table row's value for this column
sheet.append(row) # append all the tables row values to excel file
book.save("generated.xlsx")
Вопрос
Как я могу получить доступ к элементу строки результата запроса, если у меня есть ключи столбца, хранящиеся в массиве или списке?