查询sql结果根据主键拼装,然后源数据与目标数据对比
def comp_data_by_same_key(self,source_data,target_data,source_key,target_key):
print("数据源A:%s n数据源B:%s n数据源A、B的主键:%s:%s" %(source_data,target_data,source_key,target_key))
self.check_diff_key_record(source_data,target_data)
self.check_diff_field(source_data,target_data)
print("开始比较主键相同的数据")
diff_val = {}
for k1, v1 in source_data.items():
try:
v2 = target_data[k1]
# 找出相同的字段名对比数据
same_key = v1.keys() & v2.keys()
diff_list = []
for key in same_key:
# print("对比值:%s:%s" %(str(v1[key]),str(v2[key])))
if str(v1[key]) == str(v2[key]):
# print("相同的值")
# print(str(v1[key]), str(v2[key]))
continue
else:
# 找出字段名一致,值不一致的数据
# print("不同的值---------")
# print(str(v1[key]), str(v2[key]))
diff = [key, v1[key], v2[key]]
# 判断diff是否存在,若存在,以primary_key为key存进字典
if 'diff' in vars():
# diff_val[k1] = diff
diff_list.append(diff)
diff_val[k1] = diff_list
except KeyError as e:
print("keyerror:%s" % e)
continue
print("有%s个主键的值不一致: 主键名:数据源A:数据源B" % len(diff_val))
# print(diff_val)
for k, v in diff_val.items():
print("%s:%s" % (k, v))
if len(diff_val) == 0:
return True
else:
return False
def check_diff_key_record(self,source_data,target_data):
print("数据源A和B的条数差为:%s, 数据源A记录条数:%s === 数据源B记录条数:%s n" % ((len(source_data)-len(target_data)),len(source_data), len(target_data)))
print("数据源A独有的数据条数:%s n 数据: %s" %(len(source_data.keys() - target_data.keys()),(source_data.keys() - target_data.keys())))
print("数据源B独有的数据条数:%s n 数据: %s" %(len(target_data.keys() - source_data.keys()),(target_data.keys() - source_data.keys())))
def check_diff_field(self,source_data,target_data):
print("只有数据源A有的字段:%s" % (list(source_data.values())[0].keys() - list(target_data.values())[0].keys()))
print("只有数据源B有的字段:%s" % (list(target_data.values())[0].keys() - list(source_data.values())[0].keys()))
print("数据源A和B不能匹配的字段:")
print(list(source_data.values())[0].keys() ^ list(target_data.values())[0].keys())



