某些情况下查询出来的数据不想通过其他工具进行备份,可以临时通过这种方法从少量屏幕结果中进行恢复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# coding: utf8 import sys import re if len(sys.argv) != 2: exit("replicate_sql select.sql") sql_num = 0 list_col = [] list_val = [] with open(sys.argv[1],'r') as fsql: lines = fsql.readlines() for line in lines: line = line.replace("\n","") # 结果开始标志 if re.search(r".* row .*", line): sql_num += 1 # print(f"deal result {sql_num}") #正式的结果行 if ": " in line: kv = line.split(": ") col, val = kv[0].strip(), kv[1].strip() # print("/*"+line+"*/") # print("/*"+str((col, val))+"*/") # 匹配时间格式 if re.match(r"(\d{4}-\d{1,2}-\d{1,2})",val): val = f"'{val}'" # 匹配空串 if val == "": val = "''" if col in list_col: list_val.append(val) else: list_col.append(col) list_val.append(val) #结果结束了 else: if len(list_col) !=0 and len(list_val) !=0 : print("insert into t1({cols}) values({vals});".format(cols=",".join(list_col), vals=",".join(list_val))) list_val = [] print(f"/*deal {sql_num} sql*/") |
python3 replaicate_sql.py ~/tmp/t.sql