使用python将mysql数据导入excel-select into outfile

本文介绍如何使用MySQL将查询结果导出为CSV文件,并提供了一个Python脚本示例,展示了如何通过编码转换和格式设置来确保数据正确导出。

-- 本地路径一定要加引号 'D:\\luoluowork\\baidu20160901.csv'

-- mysql一般都是utf8编码,而excel都是gb2312编码,所以要转换

-- 我试了.xls和.xlsx都失败了,只有csv可以

select CONVERT(`年份` using gb2312)
from `汇总`
where `年份`=2016 and `月份`=9
into OUTFILE 'D:\\luoluowork\\baidu20160901.csv'

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'

 

下面粘贴一个python使用select into outfile的代码

需要注意的几个地方

1.csv使用gbk方式,mysql一般使用utf8,所以一定要转换编码

2.字段名,表明要有反引号

3.拼接sql1的过程中使用一个引号报错,所以使用引号的地方全部用了三个引号

4.FIELDS TERMINATED BY ','

5.sys.setdefaultencoding('utf-8')

6.我试了.xls和.xlsx都失败了,只有csv可以

# coding=utf-8
import sys
import os
import MySQLdb
import csv
reload(sys)
sys.setdefaultencoding('utf-8')

list1 = ['2014']
#list2 = ['3']
list2 = ['1','2','3','4','5','6','7','8','9','10','11','12']
# list2=['01','02','03','04','05','06','07','08','09','10','11','12']
exception=[]

conn=MySQLdb.connect(host='localhost',user='root',passwd='123456')
conn.select_db('ctr')
conn.set_character_set('utf8')
cur = conn.cursor()
for nian in list1:
    for yue in list2:
        if int(yue) < 10:
            excel_file = "C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/baidu_CRT/baidu"+nian+"0"+yue+".csv"
        else:
            excel_file = "C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/baidu_CRT/baidu"+nian+yue+".csv"

        sql1 = """select CONVERT(`年份` using  gb2312) ,CONVERT(`月份` using  gb2312),CONVERT(`媒介类型` using  gb2312),CONVERT(`区域` using  gb2312),CONVERT(`省份` using  gb2312),CONVERT(`产品大类` using  gb2312),
					CONVERT(`产品中类` using  gb2312),CONVERT(`产品小类` using  gb2312),CONVERT(`品牌` using  gb2312),CONVERT(`产品` using  gb2312),CONVERT(`总次数` using  gb2312),CONVERT(`总费用` using  gb2312),CONVERT(`总长度面积` using  gb2312)
					from `汇总` where `年份` = """+ nian + """ and `月份` =""" + yue +""" INTO OUTFILE '"""+ excel_file +"'" + """ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'"""
        print sql1
        cur.execute(sql1)
cur.close()
conn.close()
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值