標籤:for 遠程伺服器 pen shell set ima object import 表頭
有一段時間,沒更新,但這都不是自己懶惰的借口,希望自己能堅持下去;
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--執行個體