脚本需求:
公司有台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)