Jan 22, 2010 12:21
#!/usr/bin/env python
import sys
def checkparms(parms):
"""checks all the input parameters
format: partialtableimport.py -i infile.sql -o outfile.sql -t tablename -c oldcol=newcol,oldcol=newcol,...
"""
b0rked = 0
if len(parms) < 8:
sys.exit('userdump takes at least 8 parameters, you have given %s parameters'
% len(parms))
if parms[1] != '-i' or parms[3] != '-o' or parms[5] !='-t' or parms[7] != '-c':
sys.exit('format: userdump.py -i infile.sql -o outfile.sql -t tablename -c oldcol=newcol,oldcol=newcol,...')
infile = parms[2]
outfile = parms[4]
tablename = parms[6]
colnames = parms[8]
#check if infile exists
try:
ifile = open(infile,'r')
except:
sys.exit('cannot open %s' % infile)
#check if outfile has sql extension
tfile = outfile.split('.')
if len(tfile) < 2:
sys.exit('output file needs an extension')
else:
if outfile.split('.')[1] != 'sql':
sys.exit('output file should have a .sql extension')
#check if columns are correctly formatted
pairs = parms[8].split(',')
for pair in pairs:
if len(pair.split('=')) != 2:
sys.exit('column parameters not formatted properly')
#check if we are over writing the outfile
try:
ofile = open(outfile,'r')
b0rked = 1
except:
pass
if b0rked:
sys.exit('file %s exists - choose another file name for output' % outfile)
ofile = open(outfile,'w')
return ifile,ofile,tablename,pairs
def createsql(ifile,ofile,tablename,pairs):
"""creates the sql"""
parsed = False
for line in ifile.readlines():
if not line.startswith('INSERT'):
ofile.write(line)
else:
if not parsed:
parts = line.split(""") VALUES (""") #split on values
keys = parts[0].split('(')
keylist = keys[1].split(', ')
# find the keys you want.
newkeylist = []
for n,k in enumerate(keylist):
for p in pairs:
x = p.split('=')[0]
if x == k:
newkeylist.append((n,k))
leftside = ','.join([x[1] for x in newkeylist])
parsed = True
#now to generate the right side
parts = line.split(""") VALUES (""") #split on values
valus = parts[1].strip(""");""") #strip trailing ) and ;
vallist = valus.split(', ') #separate the values
rightlist = []
for k in newkeylist:
rightlist.append(vallist[k[0]])
rightside = ','.join([x for x in rightlist])
sql = "INSERT INTO %s (%s) VALUES (%s);\n" % (tablename,leftside,rightside)
ofile.write(sql)
ofile.close()
ifile.close()
if __name__=='__main__':
ifile,ofile,tablename,pairs = checkparms(sys.argv)
createsql(ifile,ofile,tablename,pairs)