我要做什么
使用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")
问题
如果我将列键存储在数组或列表中,如何访问查询结果行的元素?
答案 0 :(得分:1)
您可以在新版本的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