import sys,json,collections
|
from pathlib import Path
|
P=Path(__file__).parent
|
sys.path.insert(0,str(P.parent/'iqc-import-20261012/deps'))
|
import pymysql
|
c=pymysql.connect(host='36.213.150.237',port=10000,user='root',password=sys.stdin.readline().strip(),database='mom-hm',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
|
s={}
|
with c.cursor() as q:
|
q.execute('SELECT DATABASE() db');assert q.fetchone()['db']=='mom-hm'
|
q.execute('SHOW CREATE TABLE mes_qc_indicator');s['schema']=q.fetchone()
|
q.execute('SELECT * FROM mes_qc_indicator ORDER BY id');s['indicators']=q.fetchall()
|
q.execute("SELECT table_name,column_name,column_type,column_comment FROM information_schema.columns WHERE table_schema=DATABASE() AND (column_name LIKE '%%indicator%%' OR column_comment LIKE '%%质检指标%%' OR column_comment LIKE '%%检测指标%%') ORDER BY table_name,ordinal_position");s['reference_columns']=q.fetchall()
|
groups=collections.defaultdict(list)
|
for r in s['indicators']:
|
if r['deleted'] in (0,False,b'\x00'):groups[(r.get('tenant_id',0),(r['name'] or '').strip())].append(r)
|
s['duplicates']=[{'name':k[1],'tenant_id':k[0],'rows':v} for k,v in groups.items() if len(v)>1]
|
ids=[r['id'] for g in s['duplicates'] for r in g['rows']]
|
s['references']={}
|
for col in s['reference_columns']:
|
t=col['TABLE_NAME'];field=col['COLUMN_NAME']
|
if field!='indicator_id' or not ids:continue
|
q.execute('SHOW CREATE TABLE `'+t+'`');schema=q.fetchone()
|
q.execute('SELECT * FROM `'+t+'` WHERE `'+field+'` IN ('+','.join('%s' for _ in ids)+') ORDER BY id',ids)
|
s['references'][t]={'schema':schema,'rows':q.fetchall()}
|
(P/'before-indicator-dedup.json').write_text(json.dumps(s,ensure_ascii=False,default=str,indent=2),encoding='utf8')
|
print(s['schema']['Create Table']);print('reference_columns',json.dumps(s['reference_columns'],ensure_ascii=False));print('duplicates',json.dumps(s['duplicates'],ensure_ascii=False,default=str));print('reference_counts',json.dumps({t:len(x['rows']) for t,x in s['references'].items()}))
|
c.close()
|