问题
最近我遇到了导出大量数据的问题,并将其发送到客户端。
详细的问题说明显示在以下链接页面中:
How can I adapt my code to make it compatible to Microsoft Excel?
有什么不同
虽然,链接页面中的第一个答案帮助我解决了excel打开 .csv 文件时代码混乱的问题。但正如我评论的那样,这对用户来说会有点不方便。所以我尝试直接导出 .xls 文件。
我的问题是
因为数据集非常大,我无法一次生成整个 .xls 文件,也许发送一行或几行是个好主意每次都使用 .csv 文件到客户端。
那么如何将 .xls 数据逐件发送到客户端?或者更好的推荐?
我非常感谢您的回答!
答案 0 :(得分:0)
这是使用依赖项flask + sql-alchemy + pandas
的可能解决方案def export_query(query, file_name = None):
results = db.session.execute(query)
fetched = results.fetchall()
dataframe = pd.DataFrame(fetched)
dataframe.columns = get_query_coloumn_names(query)
base_path = current_app.config['UPLOAD_FOLDER']
workingdocs = base_path + datetime.now().strftime("%Y%m%d%H%M%S") + '/'
if not os.path.exists(workingdocs):
os.makedirs(workingdocs)
if file_name is None:
file_name = workingdocs + str(uuid.uuid4()) + '-' + 'export.xlsx'
else:
file_name = workingdocs + file_name
dataframe.to_excel(file_name)
return file_name
def export_all(q, page_limit, page):
query = db.session.query(...).\
outerjoin(..).\
filter(..).\
order_by(...)
paging_query = query.paginate(page, page_limit, True)
# TODO need to return total to help user know to keep trying paging_query.total
return export_query(paging_query)
@api.route('/export_excel/', methods=['POST'])
@permission_required(Permission.VIEW_REPORT)
def export_excel():
json = request.get_json(silent=False, force=True)
q = ''.join(('%',json['q'],'%'))
page_limit = try_parse_int(json['page_limit'])
page = try_parse_int(json['page'])
file_name = export_all(q, page_limit, page)
response = send_file(file_name)
response.headers["Content-Disposition"] = "attachment; filename=export.xlsx"
return response