读取DM数据库
This commit is contained in:
102
scripts/inspect_dm_tables.py
Normal file
102
scripts/inspect_dm_tables.py
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user