SQLALchemy: получить элементы строки на основе столбца ключ / имя - PullRequest
0 голосов
/ 02 сентября 2018

Что я пытаюсь сделать

Используя 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")

Вопрос

Как я могу получить доступ к элементу строки результата запроса, если у меня есть ключи столбца, хранящиеся в массиве или списке?

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете попробовать это в новой версии sqlAlchemy:

for item in database_orm_class.query.all():    
    item = dict(item)
    # your code

или для более старой версии:

for item in database_orm_class.query.all():    
        item = item.__dict__
        # your code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...