# encoding=utf-8
import os, sys, string, types, datetime
import MySQLdb
import xlwt
ezxf = xlwt.easyxf
reload(sys)
sys.setdefaultencoding('utf-8')
enddate = raw_input('请输入截止日期(YYYY-MM-DD):'.encode('gbk'))
try:
d = enddate.split('-')
datetime.date(int(d[0]), int(d[1]), int(d[2]))
except Exception, e:
print '输入日期格式异常!'.encode('gbk')
sys.exit()
# 参数设置
SERVER = '192.168.0.100'
USERNAME = 'root'
PASSWD = 'root'
DB = 'test'
# 当前路径
path = os.getcwd().decode('gbk').encode('utf-8')
rfile = u'测试_%s.xls' %enddate
# 定义格式
heading_xf = ezxf('font: bold on; align: wrap on, vert centre, horiz center;'
'borders: left thin, right thin, top thin, bottom thin;'
'pattern: pattern solid,fore_colour sky_blue;') # 表头格式
kinds = 'int text text text date money int money money int int int'.split() # 字段类型
col_width_px = (50, 60, 220, 320, 80, 100, 60, 100, 80, 60, 60, 80) # 每列列宽(像素)
kind_to_xf_map = {
'date': ezxf('borders: left thin, right thin, top thin, bottom thin;', num_format_str='yyyy-mm-dd'),
'int': ezxf('borders: left thin, right thin, top thin, bottom thin;', num_format_str='##0'),
'money': ezxf('borders: left thin, right thin, top thin, bottom thin;', num_format_str='#,##0.00'),
'text': ezxf('borders: left thin, right thin, top thin, bottom thin;')
}
data_xfs = [kind_to_xf_map[k] for k in kinds]
# 连接数据库
try:
conn = MySQLdb.connect(host = SERVER, user = USERNAME, passwd = PASSWD, db = DB, charset = 'utf8')
except :
sys.exit()
# 获取 cursor 对象进行操作
#cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor) # 使用字典cursor取得结果集
cursor = conn.cursor()
conn.cursor
# 查询 sql
sql = """ SELECT
number AS '编号', province AS '省份'
FROM
test
WHERE
date < %s """
# 获取查询结果
#cursor.execute("SET NAMES 'utf8'")
cursor.execute(sql, (enddate,))
data = cursor.fetchall()
# 创建工作簿及表单
book = xlwt.Workbook('utf-8')
sheet = book.add_sheet(u'测试', cell_overwrite_ok=True)
# 表字段名信息写入
header = cursor.description
rowx = 0
for colx, value in enumerate(header):
sheet.write(rowx, colx, value[0], heading_xf)
sheet.col(colx).width = int(col_width_px[colx] * 36.568) # 设置列宽 1px = 36.568
# 数据写入
if data:
for rec in data:
rowx += 1
for colx, value in enumerate(rec):
sheet.write(rowx, colx, value, data_xfs[colx])
# 写入最终文件
book.save(os.path.join(path, rfile))
# 关闭资源
cursor.close()
conn.close()