刚开始在本地导出的时候没有问题,当放到服务器上的时候 进行导出时,中文显示的都是?号 如下
调用的方法 pymysql.connect(host=HOST, port=PORT, user=DBUSER, passwd=DBPASSWORD, db=DBNAME)
将其增加参数charset='utf8'后 导出正常,
engine = pymysql.connect(host=HOST, port=PORT, user=DBUSER, passwd=DBPASSWORD, db=DBNAME, charset='utf8')
完整代码如下:
# -*- coding:utf-8 -*-
import pandas as pd
import datetime, pymysql
from io import BytesIO
from django.http import HttpResponse
from django.utils.encoding import escape_uri_path
def VideoBrowseExcel(req):
"""
视频浏览记录导出
:param req:
:return:
"""
start_time = req.GET.get('start_time', False)
end_time = req.GET.get('end_time', False)
outfile = BytesIO()
engine = pymysql.connect(host=HOST, port=PORT, user=DBUSER, passwd=DBPASSWORD, db=DBNAME, charset='utf8')
sql = f"""SELECT
usermsg.`name`,
videomsg.title,
broser.create_time
FROM
livevideo_browserecord AS broser
INNER JOIN useradmin_usermsgtb AS usermsg ON (broser.user_id = usermsg.id)
INNER JOIN livevideo_videomsgtb AS videomsg ON (
broser.video_id = videomsg.id
)
WHERE
broser.create_time >='{new_start_time}'
AND broser.create_time <= '{new_end_time}' """
df = pd.read_sql(sql, engine)
file_name = f'视频学习记录{datetime.datetime.now().strftime("%Y-%m-%d")}.xlsx'
response = HttpResponse(content_type="text/csv")
response['Content-Disposition'] = "attachment; filename*=utf-8''{}".format(escape_uri_path(file_name))
userexceldata = {"name": u'用户名', 'title': u'视频标题', 'create_time': u'观看时间'}
df.rename(columns=userexceldata, inplace=True) # 重定义列名 可修改任意列名
df.to_excel(outfile, index=False, encoding='utf-8')
response.write(outfile.getvalue())
return response