48 lines
2.2 KiB
Python
48 lines
2.2 KiB
Python
# -*- coding:utf-8 -*-
|
||
"""幂等补列:opp_mining_batches / opp_clusters 加 project_id(information_schema 守卫,绝不 DROP)。"""
|
||
import asyncio, os, sys
|
||
W = "/d/pipeline/pipeline-app"; os.chdir(W); sys.path.insert(0, W)
|
||
from appPublic.folderUtils import ProgramPath
|
||
from appPublic.jsonConfig import getConfig
|
||
from appPublic.event_dispatcher import EventDispatcher
|
||
from sqlor.dbpools import DBPools
|
||
from ahserver.serverenv import ServerEnv
|
||
p = ProgramPath(); c = getConfig(W, {"workdir": W, "ProgramPath": p}); DBPools(c.databases)
|
||
se = ServerEnv(); se.event_dispatcher = EventDispatcher(); se.get_module_dbname = lambda m: "pipeline"
|
||
|
||
TARGETS = [("opp_mining_batches", "project_id"), ("opp_clusters", "project_id")]
|
||
|
||
async def main():
|
||
async with DBPools().sqlorContext("pipeline") as sor:
|
||
for table, col in TARGETS:
|
||
chk = await sor.sqlExe(
|
||
"SELECT COLUMN_NAME FROM information_schema.COLUMNS "
|
||
"WHERE table_schema=DATABASE() AND table_name=${t}$ AND column_name=${c}$",
|
||
{"t": table, "c": col})
|
||
await sor.sqlExe("COMMIT", {})
|
||
if chk:
|
||
print("SKIP(已存在): %s.%s" % (table, col))
|
||
continue
|
||
await sor.sqlExe(
|
||
"ALTER TABLE %s ADD COLUMN `%s` VARCHAR(32) DEFAULT '' "
|
||
"COMMENT '项目ID(空=平台级挖掘)'" % (table, col), {})
|
||
await sor.sqlExe("COMMIT", {})
|
||
print("ADDED: %s.%s" % (table, col))
|
||
# 索引:批次按 org+project 查询
|
||
try:
|
||
await sor.sqlExe("CREATE INDEX idx_opp_batches_orgproj ON opp_mining_batches (org_id, project_id)", {})
|
||
await sor.sqlExe("COMMIT", {})
|
||
print("index added")
|
||
except Exception as e:
|
||
print("index skip:", str(e)[:60])
|
||
# 验证
|
||
for table, col in TARGETS:
|
||
chk = await sor.sqlExe(
|
||
"SELECT COLUMN_NAME FROM information_schema.COLUMNS "
|
||
"WHERE table_schema=DATABASE() AND table_name=${t}$ AND column_name=${c}$",
|
||
{"t": table, "c": col})
|
||
await sor.sqlExe("COMMIT", {})
|
||
print("VERIFY %s.%s:" % (table, col), "OK" if chk else "MISSING")
|
||
|
||
asyncio.run(main())
|