0ab2c84813
- icon_to_dict/options/create/update 用 resolve_url 补全相对路径 - 新增生产库结构对比/索引修复/建表脚本
128 lines
4.7 KiB
Python
128 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""直接在生产数据库创建 compute_series 和 compute_icons 表,并更新 alembic 版本。"""
|
|
import sys
|
|
|
|
# 生产数据库连接配置
|
|
PROD_HOST = "124.221.143.140"
|
|
PORT = 8091
|
|
USER = "opc"
|
|
PASSWORD = "jjjsgysyujkwjwgb"
|
|
DB_NAME = "opc"
|
|
|
|
PROD_URL = f"mysql+pymysql://{USER}:{PASSWORD}@{PROD_HOST}:{PORT}/{DB_NAME}?charset=utf8mb4"
|
|
|
|
from sqlalchemy import create_engine, text, inspect
|
|
|
|
print(f"连接生产数据库: {PROD_HOST}:{PORT}/{DB_NAME}")
|
|
print()
|
|
|
|
engine = create_engine(PROD_URL, pool_pre_ping=True, connect_args={'connect_timeout': 10})
|
|
|
|
try:
|
|
# 1. 创建 compute_series 表
|
|
print("1. 创建 compute_series 表...")
|
|
with engine.begin() as conn:
|
|
conn.execute(text("""
|
|
CREATE TABLE IF NOT EXISTS compute_series (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
name VARCHAR(128) NOT NULL,
|
|
display_name VARCHAR(256) DEFAULT '',
|
|
supplier VARCHAR(128) DEFAULT '',
|
|
icon VARCHAR(512) DEFAULT '',
|
|
icon_file VARCHAR(512) DEFAULT '',
|
|
description TEXT,
|
|
sort_order INTEGER DEFAULT 0,
|
|
status VARCHAR(32) DEFAULT 'active',
|
|
created_at VARCHAR(32) DEFAULT '',
|
|
updated_at VARCHAR(32) DEFAULT '',
|
|
UNIQUE KEY uq_compute_series_name (name),
|
|
KEY idx_compute_series_name (name)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
"""))
|
|
print(" ✓ compute_series 表创建成功")
|
|
|
|
# 2. 创建 compute_icons 表
|
|
print("2. 创建 compute_icons 表...")
|
|
with engine.begin() as conn:
|
|
conn.execute(text("""
|
|
CREATE TABLE IF NOT EXISTS compute_icons (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
name VARCHAR(128) NOT NULL,
|
|
category VARCHAR(32) DEFAULT 'model',
|
|
url VARCHAR(512) DEFAULT '',
|
|
file VARCHAR(512) DEFAULT '',
|
|
file_size INTEGER DEFAULT 0,
|
|
mime_type VARCHAR(64) DEFAULT '',
|
|
width INTEGER DEFAULT 0,
|
|
height INTEGER DEFAULT 0,
|
|
description TEXT,
|
|
usage_count INTEGER DEFAULT 0,
|
|
status VARCHAR(32) DEFAULT 'active',
|
|
created_at VARCHAR(32) DEFAULT '',
|
|
updated_at VARCHAR(32) DEFAULT '',
|
|
KEY idx_compute_icons_name (name),
|
|
KEY idx_compute_icons_category (category)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
"""))
|
|
print(" ✓ compute_icons 表创建成功")
|
|
|
|
# 3. 更新 alembic_version 表
|
|
print("3. 更新 alembic_version 到 0078...")
|
|
with engine.begin() as conn:
|
|
# 检查 alembic_version 表是否存在
|
|
result = conn.execute(text("SHOW TABLES LIKE 'alembic_version'"))
|
|
if result.fetchone():
|
|
# 更新版本号
|
|
conn.execute(text("UPDATE alembic_version SET version_num = '0078'"))
|
|
print(" ✓ alembic_version 已更新到 0078")
|
|
else:
|
|
# 创建表并插入版本号
|
|
conn.execute(text("""
|
|
CREATE TABLE alembic_version (
|
|
version_num VARCHAR(32) NOT NULL,
|
|
PRIMARY KEY (version_num)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
|
|
"""))
|
|
conn.execute(text("INSERT INTO alembic_version (version_num) VALUES ('0078')"))
|
|
print(" ✓ alembic_version 表已创建并设置为 0078")
|
|
|
|
# 4. 验证表是否创建成功
|
|
print()
|
|
print("4. 验证表结构...")
|
|
inspector = inspect(engine)
|
|
tables = inspector.get_table_names()
|
|
|
|
for table_name in ['compute_series', 'compute_icons']:
|
|
if table_name in tables:
|
|
cols = inspector.get_columns(table_name)
|
|
print(f" ✓ {table_name}: {len(cols)} 列")
|
|
for col in cols:
|
|
print(f" - {col['name']}: {col['type']}")
|
|
else:
|
|
print(f" ✗ {table_name}: 不存在!")
|
|
|
|
# 5. 验证 alembic 版本
|
|
print()
|
|
print("5. 验证 alembic 版本...")
|
|
with engine.connect() as conn:
|
|
result = conn.execute(text("SELECT version_num FROM alembic_version"))
|
|
version = result.fetchone()
|
|
if version:
|
|
print(f" ✓ 当前 alembic 版本: {version[0]}")
|
|
else:
|
|
print(" ✗ alembic_version 表为空")
|
|
|
|
print()
|
|
print("=" * 60)
|
|
print("✅ 生产数据库修复完成!")
|
|
print("=" * 60)
|
|
|
|
except Exception as e:
|
|
print(f"❌ 错误: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
finally:
|
|
engine.dispose()
|