使用pymysql+pandas 线上导出excel导出的中文都变成了问号 处理方式

刚开始在本地导出的时候没有问题,当放到服务器上的时候 进行导出时,中文显示的都是?号 如下

调用的方法 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值