103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
在达梦数据库机器上运行,查看各表结构,用于编写 config 中的 db.query
|
||
用法: python scripts/inspect_dm_tables.py
|
||
|
||
密码获取顺序:环境变量 DM_PASSWORD > 下方 LOCAL_PASSWORD
|
||
若使用 LOCAL_PASSWORD,切勿提交到 git!可执行:git update-index --assume-unchanged scripts/inspect_dm_tables.py
|
||
"""
|
||
import os
|
||
import sys
|
||
|
||
# 可选:在此直接填写密码(仅限本机调试,切勿提交到版本库!)
|
||
LOCAL_PASSWORD = None # 例如: "你的密码"
|
||
|
||
# 支持从项目根或 scripts 目录运行
|
||
_script_dir = os.path.dirname(os.path.abspath(__file__))
|
||
_project_root = os.path.dirname(_script_dir)
|
||
if _project_root not in sys.path:
|
||
sys.path.insert(0, _project_root)
|
||
|
||
try:
|
||
import dmPython
|
||
except ImportError:
|
||
print("请先安装: pip install dmPython")
|
||
sys.exit(1)
|
||
|
||
CONFIG = {
|
||
"user": "SYSDBA",
|
||
"password": os.environ.get("DM_PASSWORD") or LOCAL_PASSWORD,
|
||
"server": "127.0.0.1",
|
||
"port": 5080,
|
||
"schema": "SYSDBA",
|
||
}
|
||
|
||
TABLES = [
|
||
"OBJECTIVE_INSTANCE",
|
||
"METRIC_VALUE_INSTANCE",
|
||
"METRIC_PROFILE",
|
||
"ROLE_PROFILE",
|
||
"TASK_PROFILE",
|
||
"RELATION_INSTANCE",
|
||
]
|
||
|
||
|
||
def main():
|
||
if not CONFIG["password"]:
|
||
print("请设置环境变量 DM_PASSWORD 或在脚本中填写 LOCAL_PASSWORD")
|
||
sys.exit(1)
|
||
|
||
try:
|
||
conn = dmPython.connect(
|
||
user=CONFIG["user"],
|
||
password=CONFIG["password"],
|
||
server=CONFIG["server"],
|
||
port=CONFIG["port"],
|
||
schema=CONFIG["schema"],
|
||
)
|
||
except Exception as e:
|
||
print(f"连接失败: {e}")
|
||
sys.exit(1)
|
||
|
||
cursor = conn.cursor()
|
||
print("=" * 60)
|
||
print("达梦表结构(用于编写 config/db.query)")
|
||
print("=" * 60)
|
||
|
||
for table in TABLES:
|
||
try:
|
||
cursor.execute(f'SELECT * FROM "{CONFIG["schema"]}"."{table}" WHERE 1=0')
|
||
cols = [d[0] for d in cursor.description]
|
||
print(f"\n【{table}】 列: {cols}")
|
||
except Exception as e:
|
||
print(f"\n【{table}】 查询失败: {e}")
|
||
|
||
cursor.execute(
|
||
"""
|
||
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
|
||
FROM DBA_TAB_COLUMNS
|
||
WHERE OWNER = ?
|
||
ORDER BY TABLE_NAME, COLUMN_ID
|
||
""",
|
||
(CONFIG["schema"],),
|
||
)
|
||
rows = cursor.fetchall()
|
||
|
||
print("\n" + "=" * 60)
|
||
print("所有列详情 (TABLE_NAME | COLUMN_NAME | DATA_TYPE)")
|
||
print("=" * 60)
|
||
cur_table = None
|
||
for table, col, dtype in rows:
|
||
if table != cur_table:
|
||
cur_table = table
|
||
print(f"\n--- {table} ---")
|
||
print(f" {col}: {dtype}")
|
||
|
||
cursor.close()
|
||
conn.close()
|
||
print("\n完成。请根据上述结构在 config 中编写 db.query。")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|