zoukankan      html  css  js  c++  java
  • python操作MySQL--实例

       有一段时间,没更新,但这都不是自己懒惰的借口,希望自己能坚持下去;

    python可以操作MySQL 数据库,需要安装的是MySQL-python,并且实现读入excel表及生成excel 表,则需要xlrd及xlwt这两个python 模块;

    1、安装MySQL-python:

      yum -y install MySQL-python    #########在python 程序导入模块时名字为MySQLdb

    2、安装excel两个模块:

      pip install xlrd xlwt   ####pip 默认使用的是国外的镜像,网速较慢,可以更换为国内的镜像,临时则使用 -i https://pypi.douban.com/simple/

    3、以下代码中其它的模块均为内置模块;

    4、导入excel的模板内容如下:

      第一行所有列有数据,第二行部分列有数据

      

    1 #!/usr/bin/env python 
      2 #coding:utf-8 
      3 import MySQLdb,sys,xlwt,subprocess,datetime,xlrd,time
      4 reload(sys)    #######以下两行解决了写excel 时中文字符的问题
      5 sys.setdefaultencoding('utf-8')
      6 class Mysql_Select(object):
      7     def __init__(self):
      8         pass
      9 
     10     def yes_Format(self):
     11         child = subprocess.Popen("date +'%Y-%m-%d %H:%M:%S' -d '-1 days'",shell=True,stdout=subprocess.PIPE)
     12         yes_time = child.stdout.read()
     13         return yes_time            ############返回前一天的日期,供Mysql 语句使用
     14 
     15     def mysql_Connect_Status(self,date_yesterday):
     16         conn = MySQLdb.connect(user='',passwd='',host='',charset='utf8')
     17         cur = conn.cursor()
    18          machines_status = cur.fetchmany(cur.execute("select bdass.salesOrder.orderNum,bdass.salesOrder.salesTime,bdas    s.machines.name,bdass.salesOrder.goodsCode,bdass.salesOrder.salesPrice from bdass.salesOrder,bdass.machines where bda    ss.salesOrder.salesTime > '%s' and bdass.salesOrder.machineId = bdass.machines.clientId "%date_yesterday))
     19         cur.close()
     20         conn.close()
     21         return machines_status        #############查询生产服务器的Mysql的表
     22 
     23     def excel_Read(self,machines_status):
     24         W=xlwt.Workbook('utf8')       #########创建一个excel写对象
     25         ws = W.add_sheet('Sheet1')    #########增加一个sheet
     26         ws.col(0).width = 9999         ##########表格的列属性
     27         ws.col(1).width = 6666
     28         ws.col(20).width = 6666
     29         ws.col(43).width = 6666
     30         ws.col(44).width = 6666
     31         ws.col(45).width = 6666
     32         ws.col(65).width = 9999
     33         ws.col(103).width = 6666
     34         ws.col(104).width = 6666
     35         module_data = xlrd.open_workbook('sales_module.xls')   #######创建一个excel读对象
      36       table = module_data.sheet_by_index(0)    #########读取第一个sheet
     37         ncols = table.ncols                      #########表的所有列
     38         for raws in xrange(len(machines_status)): ############## 写模板里的固定值;
     39             for values in xrange(ncols):
     40                 if values not  in [0,1,20,43,44,45,53,54,55,56,57,59,65,103,104]:
     41                     ws.write(raws+1,values,label=table.cell(1,values).value)
     42 
     43         for values in xrange(ncols):  ##############写模板的第一行
     44             ws.write(0,values,label=table.cell(0,values).value)
     45 
     46         for raw in xrange(len(machines_status)): ###########写订单的数据;
     47             ws.write(raw+1,0,label=machines_status[raw][0])  #订单号
     48             ws.write(raw+1,1,label=str(machines_status[raw][1]).split(' ')[0])  #订单日期
     49             ws.write(raw+1,20,label=machines_status[raw][2])    #表头备注
     50             ws.write(raw+1,43,label=str(machines_status[raw][1]).split(' ')[0]) #表头预发货日期
     51             ws.write(raw+1,44,label=str(machines_status[raw][1]).split(' ')[0]) #表头预完工日期 
     52             ws.write(raw+1,45,label=str(machines_status[raw][3]))   #存货编码
     53             ws.write(raw+1,53,label=str(machines_status[raw][4]))   #报价
    54              ws.write(raw+1,53,label=str(machines_status[raw][4]))   #报价
     54             ws.write(raw+1,54,label=str(machines_status[raw][4]))   #含税单价
     55             ws.write(raw+1,55,label=str(machines_status[raw][4] - round(machines_status[raw][4]/1.17*0.17,2)))  #金额
        _原币_无税
     56             ws.write(raw+1,56,label=str('%.2f' %(machines_status[raw][4]/1.17*0.17)))   #税额
     57             ws.write(raw+1,57,label=str(machines_status[raw][4]))   #价税合计
     58             ws.write(raw+1,59,label=str(machines_status[raw][4] - round(machines_status[raw][4]/1.17*0.17,2)))  #无税
        _单价
     59             ws.write(raw+1,65,label=str(machines_status[raw][0]))   #备注
     60             ws.write(raw+1,103,label=str(machines_status[raw][1]).split(' ')[0])    #预完工日期
     61             ws.write(raw+1,104,label=str(machines_status[raw][1]).split(' ')[0])    #预发货日期
     62 
     63         W.save('模板生成.xls')    ########最后保存并命名
     64 
     65 
     66     def copy_Remote(self):          #####传送到远程服务器
     67         child = subprocess.Popen("scp -P 7777 模板生成.xls server_net:/share/技术/",shell=True,stdout=subprocess.PIPE    )
     68 
     69 system = Mysql_Select()
    70 if __name__ == '__main__':
     71     yes_time = system.yes_Format()
     72     machines_status = system.mysql_Connect_Status(yes_time)
     73     system.excel_Read(machines_status)
     74     system.copy_Remote()




    最后代码完成并生成的excel表如下:

    代码部分,还有待优化,加油;

    
    
  • 相关阅读:
    7. 流程控制
    6. 工作区域与包
    5. Go函数
    4. Go常量
    面试题1
    数据库三范式
    触发器和存储过程
    面试题
    js 程序执行与顺序实现详解 ,来自网上
    基础的优化数据库查询,个人笔记
  • 原文地址:https://www.cnblogs.com/Mail-maomao/p/7152101.html
Copyright © 2011-2022 走看看