sqlalchemy:基于列key/name获取行元素

eqqqjvef  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(404)

我想做的
使用sqlalchemy(结合orm)我目前正在尝试创建一个函数,如:

export_database_table_to_excel_file( 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 |一些|字符串|
这是通过获取所有数据库对象列及其键来实现的。然后将这些键附加到内存中的(空)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()result中的所有行,另一个内部循环遍历数据库orm对象的值。内部循环将值附加到数组中,外部循环将此数组作为表格行添加到excel文件中。
代码
一些代码已经在whatworks中提到了。添加了两个for循环,用于迭代查询结果(外部)和每个结果值(内部)。col\u id和query\u result.col\u 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")

问题
如果列键存储在数组或列表中,如何访问查询结果行的元素?

6qfn3psc

6qfn3psc1#

您可以在新版本的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

相关问题