1. 程式人生 > >python操作MySQL--實例

python操作MySQL--實例

out bject 中文字符 stdout copy sys where init date

有一段時間,沒更新,但這都不是自己懶惰的借口,希望自己能堅持下去;

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表如下:
技術分享

代碼部分,還有待優化,加油;



python操作MySQL--實例