"""列出两库全部时间列的类型,并做差异比对(只读)""" import pymysql SQL = """ SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, IFNULL(CAST(COLUMN_DEFAULT AS CHAR),'') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=%s AND DATA_TYPE IN ('timestamp','datetime') ORDER BY TABLE_NAME, ORDINAL_POSITION """ def snap(db): c = pymysql.connect(host="10.8.0.252", user="root", password="Hbhyg731024@", database=db) cur = c.cursor() cur.execute(SQL, (db,)) rows = {(r[0], r[1]): (r[2], r[3], r[4]) for r in cur.fetchall()} c.close() return rows dev, prd = snap("pms_dev"), snap("pms") keys = sorted(set(dev) | set(prd)) print("%-30s %-20s %-34s %-34s %s" % ("table.column", "", "pms_dev", "pms", "一致")) diff = 0 for k in keys: d, p = dev.get(k, ("",) * 3), prd.get(k, ("",) * 3) same = d == p if not same: diff += 1 print("%-30s %-20s %-34s %-34s %s" % (f"{k[0]}.{k[1]}", "", str(d), str(p), "OK" if same else "*** DIFF ***")) print() print("时间列总数:", len(keys), " 不一致:", diff) print() print("pms_dev 中仍是 TIMESTAMP 的列:") for k in keys: if dev.get(k, ("",))[0] == "timestamp": print(" ", f"{k[0]}.{k[1]}", dev[k]) print("pms(生产) 中仍是 TIMESTAMP 的列:") for k in keys: if prd.get(k, ("",))[0] == "timestamp": print(" ", f"{k[0]}.{k[1]}", prd[k])