一天一腳本--之二

腳本需求:

公司有臺mysql數據庫,每天會從一ftp服務器上下載*.dat文件,然後通過mysql把.dat文件導入數據庫,在導入數據庫之前需要判斷數據庫表中是否存在此記錄,如果無此記錄,則導入;如果已有些記錄,則不導入。

腳本實現:

大概思路:通過mysql -e命令查詢表中的記錄中的特定列Guild_ID(唯一值),然後重定向到table.in文件中,通過for 循環遍歷寫到列表l中;

通過讀取crm.dat文件,同樣通過for循環把文件中的第一條記錄讀取到列表record中,對比record[2]中的值是否在列表l中,如果不在l中,就重定向l到文件table.will中。然後通過mysql -e把table.will文件導入mysql

腳本名:import.sh

#!/usr/bin/env python
import os
COMMAND1='(dbUser=root;dbPwd=123456;dbName=test;mysql -u$dbUser -p$dbPwd $dbName -e"select Guild_ID from TroopsRanks" > table.in)'
COMMAND2="""(dbUser=root;dbPwd=123456;dbName=test;mysql -u$dbUser -p$dbPwd $dbName -e"load data local infile '/root/table.will' IGNORE into table TroopsRanks character set utf8(Area_ID,Group_ID,Guild_ID,Guild_Name,Grand_ParentID,Total_TroopsRecord,Total_MemberLevel);")"""
os.system(COMMAND1)

l=[]
record=[]

f1=open('table.in')
lines=f1.readlines()
f1.close()
f2=open('crm.dat')
records=f2.readlines()
f2.close()

for line in lines:
        line=line.strip('\n')
        l.append(str(line))

for record in records:
        record=record.split()
        if record[2] not in l:
                print record
                f=open('table.will','w')
                f.write(record[0])
                f.write('\t')
                f.write(record[1])
                f.write('\t')
                f.write(record[2])
                f.write('\t')
                f.write(record[3])
                f.write('\t')
                f.write(record[4])
                f.write('\t')
                f.write(record[5])
                f.write('\t')
                f.write(record[6])
                f.close()

os.system(COMMAND2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章