"""列出两库时间列的完整定义(含 EXTRA),用于生成对齐清单(只读)""" import pymysql SQL = """ SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, IFNULL(CAST(COLUMN_DEFAULT AS CHAR),''), EXTRA, IFNULL(CAST(COLUMN_COMMENT 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:] for r in cur.fetchall()} c.close() return rows dev, prd = snap("pms_dev"), snap("pms") print("== 生产(pms)时间列定义(作为目标)==") for k in sorted(prd): print(" %-28s %-34s %s" % (f"{k[0]}.{k[1]}", str(prd[k][:3]), prd[k][3])) print() print("== 仅 dev != prod 的列(扩展对齐候选)==") n = 0 for k in sorted(set(dev) | set(prd)): d, p = dev.get(k), prd.get(k) if d != p: n += 1 print(" %-28s dev=%s" % (f"{k[0]}.{k[1]}", d)) print(" %-28s prd=%s" % ("", p)) print("共", n, "列") print() print("== 两库相同的 TIMESTAMP 列(不在漂移范围,需单独决策)==") for k in sorted(set(dev) & set(prd)): if dev[k][0] == "timestamp": print(" %-28s %s" % (f"{k[0]}.{k[1]}", dev[k]))