42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
|
|
"""列出两库时间列的完整定义(含 EXTRA),用于生成对齐清单(只读)"""
|
|||
|
|
import pymysql
|
|||
|
|
|
|||
|
|
SQL = """
|
|||
|
|
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE,
|
|||
|
|
IFNULL(CAST(COLUMN_DEFAULT AS CHAR),'<NULL>'),
|
|||
|
|
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]))
|